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/05/27 07:09:18 UTC

[25/51] [abbrv] [partial] cordova-windows git commit: CB-11117: Bundle updated node modules

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-common/node_modules/unorm/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/node_modules/unorm/package.json b/node_modules/cordova-common/node_modules/unorm/package.json
deleted file mode 100644
index e3559f6..0000000
--- a/node_modules/cordova-common/node_modules/unorm/package.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
-  "name": "unorm",
-  "version": "1.4.1",
-  "description": "JavaScript Unicode 8.0 Normalization - NFC, NFD, NFKC, NFKD. Read <http://unicode.org/reports/tr15/> UAX #15 Unicode Normalization Forms.",
-  "author": {
-    "name": "Bjarke Walling",
-    "email": "bwp@bwp.dk"
-  },
-  "license": "MIT or GPL-2.0",
-  "contributors": [
-    {
-      "name": "Bjarke Walling",
-      "email": "bwp@bwp.dk"
-    },
-    {
-      "name": "Oleg Grenrus",
-      "email": "oleg.grenrus@iki.fi"
-    },
-    {
-      "name": "Matsuza",
-      "email": "matsuza@gmail.com"
-    }
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git+ssh://git@github.com/walling/unorm.git"
-  },
-  "main": "./lib/unorm.js",
-  "engines": {
-    "node": ">= 0.4.0"
-  },
-  "scripts": {
-    "test": "grunt test"
-  },
-  "devDependencies": {
-    "benchmark": "~1.0.0",
-    "unorm": "1.4.1",
-    "grunt-contrib-jshint": "~0.8.0",
-    "grunt-contrib-watch": "~0.5.0",
-    "grunt-simple-mocha": "~0.4.0",
-    "grunt": "~0.4.1"
-  },
-  "gitHead": "e802d0d7844cf74b03742bce1147a82ace218396",
-  "bugs": {
-    "url": "https://github.com/walling/unorm/issues"
-  },
-  "homepage": "https://github.com/walling/unorm",
-  "_id": "unorm@1.4.1",
-  "_shasum": "364200d5f13646ca8bcd44490271335614792300",
-  "_from": "unorm@>=1.3.3 <2.0.0",
-  "_npmVersion": "1.4.28",
-  "_npmUser": {
-    "name": "walling",
-    "email": "bwp@bwp.dk"
-  },
-  "maintainers": [
-    {
-      "name": "walling",
-      "email": "bwp@bwp.dk"
-    }
-  ],
-  "dist": {
-    "shasum": "364200d5f13646ca8bcd44490271335614792300",
-    "tarball": "http://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz"
-  },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",
-  "readme": "ERROR: No README data found!"
-}

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-common/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/package.json b/node_modules/cordova-common/package.json
index 9a2eb2b..97f6916 100644
--- a/node_modules/cordova-common/package.json
+++ b/node_modules/cordova-common/package.json
@@ -1,36 +1,57 @@
 {
-  "author": {
-    "name": "Apache Software Foundation"
+  "_args": [
+    [
+      "cordova-common@^1.3.0",
+      "D:\\Cordova\\cordova-windows"
+    ]
+  ],
+  "_from": "cordova-common@>=1.3.0 <2.0.0",
+  "_id": "cordova-common@1.3.0",
+  "_inCache": true,
+  "_installable": true,
+  "_location": "/cordova-common",
+  "_nodeVersion": "5.4.1",
+  "_npmOperationalInternal": {
+    "host": "packages-16-east.internal.npmjs.com",
+    "tmp": "tmp/cordova-common-1.3.0.tgz_1464130094288_0.48495062021538615"
   },
-  "name": "cordova-common",
-  "description": "Apache Cordova tools and platforms shared routines",
-  "license": "Apache-2.0",
-  "version": "1.2.0",
-  "repository": {
-    "type": "git",
-    "url": "git://git-wip-us.apache.org/repos/asf/cordova-common.git"
+  "_npmUser": {
+    "email": "stevengill97@gmail.com",
+    "name": "stevegill"
   },
-  "bugs": {
-    "url": "https://issues.apache.org/jira/browse/CB",
-    "email": "dev@cordova.apache.org"
+  "_npmVersion": "3.9.0",
+  "_phantomChildren": {},
+  "_requested": {
+    "name": "cordova-common",
+    "raw": "cordova-common@^1.3.0",
+    "rawSpec": "^1.3.0",
+    "scope": null,
+    "spec": ">=1.3.0 <2.0.0",
+    "type": "range"
   },
-  "main": "cordova-common.js",
-  "engines": {
-    "node": ">=0.9.9"
+  "_requiredBy": [
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-1.3.0.tgz",
+  "_shasum": "f75161f6aa7cef5486fd5d69a3b0a1f628334491",
+  "_shrinkwrap": null,
+  "_spec": "cordova-common@^1.3.0",
+  "_where": "D:\\Cordova\\cordova-windows",
+  "author": {
+    "name": "Apache Software Foundation"
   },
-  "scripts": {
-    "test": "npm run jshint && npm run jasmine",
-    "jshint": "node node_modules/jshint/bin/jshint src && node node_modules/jshint/bin/jshint spec",
-    "jasmine": "node node_modules/jasmine-node/bin/jasmine-node --captureExceptions --color spec",
-    "cover": "node node_modules/istanbul/lib/cli.js cover --root src --print detail node_modules/jasmine-node/bin/jasmine-node -- spec"
+  "bugs": {
+    "email": "dev@cordova.apache.org",
+    "url": "https://issues.apache.org/jira/browse/CB"
   },
-  "engineStrict": true,
+  "contributors": [],
   "dependencies": {
     "ansi": "^0.3.1",
     "bplist-parser": "^0.1.0",
     "cordova-registry-mapper": "^1.1.8",
     "elementtree": "^0.1.6",
     "glob": "^5.0.13",
+    "minimatch": "^3.0.0",
     "osenv": "^0.1.3",
     "plist": "^1.2.0",
     "q": "^1.4.1",
@@ -39,6 +60,7 @@
     "underscore": "^1.8.3",
     "unorm": "^1.3.3"
   },
+  "description": "Apache Cordova tools and platforms shared routines",
   "devDependencies": {
     "istanbul": "^0.3.17",
     "jasmine-node": "^1.14.5",
@@ -46,11 +68,55 @@
     "promise-matchers": "^0.9.6",
     "rewire": "^2.5.1"
   },
-  "contributors": [],
-  "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-common\nExpoeses shared functionality used by [cordova-lib](https://github.com/apache/cordova-lib/) and Cordova platforms.\n## Exposed APIs\n\n### `eve
 nts`\n  \nRepresents special instance of NodeJS EventEmitter which is intended to be used to post events to cordova-lib and cordova-cli\n\nUsage:\n```\nvar events = require('cordova-common').events;\nevents.emit('warn', 'Some warning message')\n```\n\nThere are the following events supported by cordova-cli: `verbose`, `log`, `info`, `warn`, `error`.\n\n### `CordovaError`\n\nAn error class used by Cordova to throw cordova-specific errors. The CordovaError class is inherited from Error, so CordovaError instances is also valid Error instances (`instanceof` check succeeds).\n\nUsage:\n\n```\nvar CordovaError = require('cordova-common').CordovaError;\nthrow new CordovaError('Some error message', SOME_ERR_CODE);\n```\n\nSee [CordovaError](src/CordovaError/CordovaError.js) for supported error codes.\n\n### `ConfigParser`\n\nExposes functionality to deal with cordova project `config.xml` files. For ConfigParser API reference check [ConfigParser Readme](src/ConfigParser/README.md).\n\nUsage:
 \n```\nvar ConfigParser = require('cordova-common').ConfigParser;\nvar appConfig = new ConfigParser('path/to/cordova-app/config.xml');\nconsole.log(appconfig.name() + ':' + appConfig.version());\n```\n\n### `PluginInfoProvider` and `PluginInfo`\n\n`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.\n\nUsage:\n```\nvar PluginInfo: require('cordova-common').PluginInfo;\nvar PluginInfoProvider: require('cordova-common').PluginInfoProvider;\n\n// The following instances are equal\nvar plugin1 = new PluginInfo('path/to/plugin_directory');\nvar plugin2 = new PluginInfoProvider().get('path/to/plugin_directory');\n\nconsole.log('The plugin ' + plugin1.id + ' has version ' + plugin1.version)\n```\n\n### `ActionStack`\n\nUtility module for dealing with sequential tasks. Provides a set of tasks that are n
 eeded 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.\n\nUsage:\n```\nvar ActionStack = require('cordova-common').ActionStack;\nvar stack = new ActionStack()\n\nvar action1 = stack.createAction(task1, [<task parameters>], task1_reverter, [<reverter_parameters>]);\nvar action2 = stack.createAction(task2, [<task parameters>], task2_reverter, [<reverter_parameters>]);\n\nstack.push(action1);\nstack.push(action2);\n\nstack.process()\n.then(function() {\n    // all actions succeded\n})\n.catch(function(error){\n    // One of actions failed with error\n})\n```\n\n### `superspawn`\n\nModule for spawning child processes with some advanced logic.\n\nUsage:\n```\nvar superspawn = require('cordova-common').superspawn;\nsuperspawn.spawn('adb', ['devices'])\n.progress(function(data){\n    if (data.stderr)\n        console.error('\"adb devices\" raised an error: ' + data
 .stderr);\n})\n.then(function(devices){\n    // Do something...\n})\n```\n\n### `xmlHelpers`\n\nA set of utility methods for dealing with xml files.\n\nUsage:\n```\nvar xml = require('cordova-common').xmlHelpers;\n\nvar xmlDoc1 = xml.parseElementtreeSync('some/xml/file');\nvar xmlDoc2 = xml.parseElementtreeSync('another/xml/file');\n\nxml.mergeXml(doc1, doc2); // doc2 now contains all the nodes from doc1\n```\n\n### Other APIs\n\nThe APIs listed below are also exposed but are intended to be only used internally by cordova plugin installation routines.\n\n```\nPlatformJson\nConfigChanges\nConfigKeeper\nConfigFile\nmungeUtil\n```\n\n## Setup\n* Clone this repository onto your local machine\n    `git clone https://git-wip-us.apache.org/repos/asf/cordova-lib.git`\n* In terminal, navigate to the inner cordova-common directory\n    `cd cordova-lib/cordova-common`\n* Install dependencies and npm-link\n    `npm install && npm link`\n* Navigate to cordova-lib directory and link cordova-commo
 n\n    `cd ../cordova-lib && npm link cordova-common && npm install`\n",
-  "readmeFilename": "README.md",
-  "_id": "cordova-common@1.2.0",
-  "_shasum": "474b7f77c6c89d3f995c947d96046edf2e8c404d",
-  "_resolved": "file:cordova-dist\\tools\\cordova-common-1.2.0.tgz",
-  "_from": "cordova-common@1.2.0"
+  "directories": {},
+  "dist": {
+    "shasum": "f75161f6aa7cef5486fd5d69a3b0a1f628334491",
+    "tarball": "https://registry.npmjs.org/cordova-common/-/cordova-common-1.3.0.tgz"
+  },
+  "engineStrict": true,
+  "engines": {
+    "node": ">=0.9.9"
+  },
+  "license": "Apache-2.0",
+  "main": "cordova-common.js",
+  "maintainers": [
+    {
+      "email": "bowserj@apache.org",
+      "name": "bowserj"
+    },
+    {
+      "email": "kotikov.vladimir@gmail.com",
+      "name": "kotikov.vladimir"
+    },
+    {
+      "email": "purplecabbage@gmail.com",
+      "name": "purplecabbage"
+    },
+    {
+      "email": "shazron@gmail.com",
+      "name": "shazron"
+    },
+    {
+      "email": "stevengill97@gmail.com",
+      "name": "stevegill"
+    },
+    {
+      "email": "npmjs@barhams.info",
+      "name": "timbarham"
+    }
+  ],
+  "name": "cordova-common",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git://git-wip-us.apache.org/repos/asf/cordova-common.git"
+  },
+  "scripts": {
+    "cover": "node node_modules/istanbul/lib/cli.js cover --root src --print detail node_modules/jasmine-node/bin/jasmine-node -- spec",
+    "jasmine": "node node_modules/jasmine-node/bin/jasmine-node --captureExceptions --color spec",
+    "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"
 }

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/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 dd9ebbc..9c540b9 100644
--- a/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
+++ b/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
@@ -17,13 +17,17 @@
 var fs = require('fs');
 var path = require('path');
 
-var bplist = require('bplist-parser');
-var et   = require('elementtree');
-var glob = require('glob');
-var plist = require('plist');
-
-var plist_helpers = require('../util/plist-helpers');
-var xml_helpers = require('../util/xml-helpers');
+var modules = {};
+var addProperty = require('../util/addProperty');
+
+// Use delay loading to ensure plist and other node modules to not get loaded
+// on Android, Windows platforms
+addProperty(module, 'bplist', 'bplist-parser', modules);
+addProperty(module, 'et', 'elementtree', modules);
+addProperty(module, 'glob', 'glob', modules);
+addProperty(module, 'plist', 'plist', modules);
+addProperty(module, 'plist_helpers', '../util/plist-helpers', modules);
+addProperty(module, 'xml_helpers', '../util/xml-helpers', modules);
 
 /******************************************************************************
 * ConfigFile class
@@ -67,7 +71,7 @@ function ConfigFile_load() {
     // the same in a future release
     if (ext == '.xml' || ext == '.appxmanifest') {
         self.type = 'xml';
-        self.data = xml_helpers.parseElementtreeSync(filepath);
+        self.data = modules.xml_helpers.parseElementtreeSync(filepath);
     } else {
         // plist file
         self.type = 'plist';
@@ -76,8 +80,8 @@ function ConfigFile_load() {
         //       Do we still need to support binary plist?
         //       If yes, use plist.parseStringSync() and read the file once.
         self.data = isBinaryPlist(filepath) ?
-                bplist.parseBuffer(fs.readFileSync(filepath)) :
-                plist.parse(fs.readFileSync(filepath, 'utf8'));
+                modules.bplist.parseBuffer(fs.readFileSync(filepath)) :
+                modules.plist.parse(fs.readFileSync(filepath, 'utf8'));
     }
 }
 
@@ -88,7 +92,7 @@ ConfigFile.prototype.save = function ConfigFile_save() {
     } else {
         // plist
         var regExp = new RegExp('<string>[ \t\r\n]+?</string>', 'g');
-        fs.writeFileSync(self.filepath, plist.build(self.data).replace(regExp, '<string></string>'));
+        fs.writeFileSync(self.filepath, modules.plist.build(self.data).replace(regExp, '<string></string>'));
     }
     self.is_changed = false;
 };
@@ -98,16 +102,16 @@ ConfigFile.prototype.graft_child = function ConfigFile_graft_child(selector, xml
     var filepath = self.filepath;
     var result;
     if (self.type === 'xml') {
-        var xml_to_graft = [et.XML(xml_child.xml)];
-        result = xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
+        var xml_to_graft = [modules.et.XML(xml_child.xml)];
+        result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
         if ( !result) {
-            throw new Error('grafting xml at selector "' + selector + '" from "' + filepath + '" during config install went bad :(');
+            throw new Error('Unable to graft xml at selector "' + selector + '" from "' + filepath + '" during config install');
         }
     } else {
         // plist file
-        result = plist_helpers.graftPLIST(self.data, xml_child.xml, selector);
+        result = modules.plist_helpers.graftPLIST(self.data, xml_child.xml, selector);
         if ( !result ) {
-            throw new Error('grafting to plist "' + filepath + '" during config install went bad :(');
+            throw new Error('Unable to graft plist "' + filepath + '" during config install');
         }
     }
     self.is_changed = true;
@@ -118,11 +122,11 @@ ConfigFile.prototype.prune_child = function ConfigFile_prune_child(selector, xml
     var filepath = self.filepath;
     var result;
     if (self.type === 'xml') {
-        var xml_to_graft = [et.XML(xml_child.xml)];
-        result = xml_helpers.pruneXML(self.data, xml_to_graft, selector);
+        var xml_to_graft = [modules.et.XML(xml_child.xml)];
+        result = modules.xml_helpers.pruneXML(self.data, xml_to_graft, selector);
     } else {
         // plist file
-        result = plist_helpers.prunePLIST(self.data, xml_child.xml, selector);
+        result = modules.plist_helpers.prunePLIST(self.data, xml_child.xml, selector);
     }
     if (!result) {
         var err_msg = 'Pruning at selector "' + selector + '" from "' + filepath + '" went bad.';
@@ -140,7 +144,7 @@ function resolveConfigFilePath(project_dir, platform, file) {
 
     if (file.indexOf('*') > -1) {
         // handle wildcards in targets using glob.
-        matches = glob.sync(path.join(project_dir, '**', file));
+        matches = modules.glob.sync(path.join(project_dir, '**', file));
         if (matches.length) filepath = matches[0];
 
         // [CB-5989] multiple Info.plist files may exist. default to $PROJECT_NAME-Info.plist
@@ -167,7 +171,7 @@ function resolveConfigFilePath(project_dir, platform, file) {
         } else if (platform == 'android') {
             filepath = path.join(project_dir, 'res', 'xml', 'config.xml');
         } else {
-            matches = glob.sync(path.join(project_dir, '**', 'config.xml'));
+            matches = modules.glob.sync(path.join(project_dir, '**', 'config.xml'));
             if (matches.length) filepath = matches[0];
         }
         return filepath;
@@ -180,7 +184,7 @@ function resolveConfigFilePath(project_dir, platform, file) {
 // Find out the real name of an iOS project
 // TODO: glob is slow, need a better way or caching, or avoid using more than once.
 function getIOSProjectname(project_dir) {
-    var matches = glob.sync(path.join(project_dir, '*.xcodeproj'));
+    var matches = modules.glob.sync(path.join(project_dir, '*.xcodeproj'));
     var iospath;
     if (matches.length === 1) {
         iospath = path.basename(matches[0],'.xcodeproj');

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-common/src/CordovaLogger.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/CordovaLogger.js b/node_modules/cordova-common/src/CordovaLogger.js
index 852d298..71bc7e8 100644
--- a/node_modules/cordova-common/src/CordovaLogger.js
+++ b/node_modules/cordova-common/src/CordovaLogger.js
@@ -89,7 +89,7 @@ CordovaLogger.prototype.log = function (logLevel, message) {
     var isVerbose = this.logLevel === 'verbose';
     var cursor = this.stdoutCursor;
 
-    if(message instanceof Error || logLevel === CordovaLogger.ERROR) {
+    if (message instanceof Error || logLevel === CordovaLogger.ERROR) {
         message = formatError(message, isVerbose);
         cursor = this.stderrCursor;
     }
@@ -196,10 +196,10 @@ CordovaLogger.prototype.subscribe = function (eventEmitter) {
 function formatError(error, isVerbose) {
     var message = '';
 
-    if(error instanceof CordovaError) {
+    if (error instanceof CordovaError) {
         message = error.toString(isVerbose);
-    } else if(error instanceof Error) {
-        if(isVerbose) {
+    } else if (error instanceof Error) {
+        if (isVerbose) {
             message = error.stack;
         } else {
             message = error.message;
@@ -209,7 +209,7 @@ function formatError(error, isVerbose) {
         message = error;
     }
 
-    if(message.toUpperCase().indexOf('ERROR:') !== 0) {
+    if (typeof message === 'string' && message.toUpperCase().indexOf('ERROR:') !== 0) {
         // Needed for backward compatibility with external tools
         message = 'Error: ' + message;
     }

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-common/src/FileUpdater.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/FileUpdater.js b/node_modules/cordova-common/src/FileUpdater.js
new file mode 100644
index 0000000..a09f39c
--- /dev/null
+++ b/node_modules/cordova-common/src/FileUpdater.js
@@ -0,0 +1,422 @@
+/**
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+*/
+
+"use strict";
+
+var fs = require("fs");
+var path = require("path");
+var shell = require("shelljs");
+var minimatch = require("minimatch");
+
+/**
+ * Logging callback used in the FileUpdater methods.
+ * @callback loggingCallback
+ * @param {string} message A message describing a single file update operation.
+ */
+
+/**
+ * Updates a target file or directory with a source file or directory. (Directory updates are
+ * not recursive.) Stats for target and source items must be passed in. This is an internal
+ * helper function used by other methods in this module.
+ *
+ * @param {?string} sourcePath Source file or directory to be used to update the
+ *     destination. If the source is null, then the destination is deleted if it exists.
+ * @param {?fs.Stats} sourceStats An instance of fs.Stats for the source path, or null if
+ *     the source does not exist.
+ * @param {string} targetPath Required destination file or directory to be updated. If it does
+ *     not exist, it will be created.
+ * @param {?fs.Stats} targetStats An instance of fs.Stats for the target path, or null if
+ *     the target does not exist.
+ * @param {Object} [options] Optional additional parameters for the update.
+ * @param {string} [options.rootDir] Optional root directory (such as a project) to which target
+ *     and source path parameters are relative; may be omitted if the paths are absolute. The
+ *     rootDir is always omitted from any logged paths, to make the logs easier to read.
+ * @param {boolean} [options.all] If true, all files are copied regardless of last-modified times.
+ *     Otherwise, a file is copied if the source's last-modified time is greather than or
+ *     equal to the target's last-modified time, or if the file sizes are different.
+ * @param {loggingCallback} [log] Optional logging callback that takes a string message
+ *     describing any file operations that are performed.
+ * @return {boolean} true if any changes were made, or false if the force flag is not set
+ *     and everything was up to date
+ */
+function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, options, log) {
+    var updated = false;
+
+    var rootDir = (options && options.rootDir) || "";
+    var copyAll = (options && options.all) || false;
+
+    var targetFullPath = path.join(rootDir || "", targetPath);
+
+    if (sourceStats) {
+        var sourceFullPath = path.join(rootDir || "", sourcePath);
+
+        if (targetStats) {
+            // The target exists. But if the directory status doesn't match the source, delete it.
+            if (targetStats.isDirectory() && !sourceStats.isDirectory()) {
+                log("rmdir  " + targetPath + " (source is a file)");
+                shell.rm("-rf", targetFullPath);
+                targetStats = null;
+                updated = true;
+            } else if (!targetStats.isDirectory() && sourceStats.isDirectory()) {
+                log("delete " + targetPath + " (source is a directory)");
+                shell.rm("-f", targetFullPath);
+                targetStats = null;
+                updated = true;
+            }
+        }
+
+        if (!targetStats) {
+            if (sourceStats.isDirectory()) {
+                // The target directory does not exist, so it should be created.
+                log("mkdir " + targetPath);
+                shell.mkdir("-p", targetFullPath);
+                updated = true;
+            } else if (sourceStats.isFile()) {
+                // The target file does not exist, so it should be copied from the source.
+                log("copy  " + sourcePath + " " + targetPath + (copyAll ? "" : " (new file)"));
+                shell.cp("-f", sourceFullPath, targetFullPath);
+                updated = true;
+            }
+        } else if (sourceStats.isFile() && targetStats.isFile()) {
+            // The source and target paths both exist and are files.
+            if (copyAll) {
+                // The caller specified all files should be copied.
+                log("copy  " + sourcePath + " " + targetPath);
+                shell.cp("-f", sourceFullPath, targetFullPath);
+                updated = true;
+            } else {
+                // Copy if the source has been modified since it was copied to the target, or if
+                // the file sizes are different. (The latter catches most cases in which something
+                // was done to the file after copying.) Comparison is >= rather than > to allow
+                // for timestamps lacking sub-second precision in some filesystems.
+                if (sourceStats.mtime.getTime() >= targetStats.mtime.getTime() ||
+                        sourceStats.size !== targetStats.size) {
+                    log("copy  " + sourcePath + " " + targetPath + " (updated file)");
+                    shell.cp("-f", sourceFullPath, targetFullPath);
+                    updated = true;
+                }
+            }
+        }
+    } else if (targetStats) {
+        // The target exists but the source is null, so the target should be deleted.
+        if (targetStats.isDirectory()) {
+            log("rmdir  " + targetPath + (copyAll ? "" : " (no source)"));
+            shell.rm("-rf", targetFullPath);
+        } else {
+            log("delete " + targetPath + (copyAll ? "" : " (no source)"));
+            shell.rm("-f", targetFullPath);
+        }
+        updated = true;
+    }
+
+    return updated;
+}
+
+/**
+ * Helper for updatePath and updatePaths functions. Queries stats for source and target
+ * and ensures target directory exists before copying a file.
+ */
+function updatePathInternal(sourcePath, targetPath, options, log) {
+    var rootDir = (options && options.rootDir) || "";
+    var targetFullPath = path.join(rootDir, targetPath);
+    var targetStats = fs.existsSync(targetFullPath) ? fs.statSync(targetFullPath) : null;
+    var sourceStats = null;
+
+    if (sourcePath) {
+        // A non-null source path was specified. It should exist.
+        var sourceFullPath = path.join(rootDir, sourcePath);
+        if (!fs.existsSync(sourceFullPath)) {
+            throw new Error("Source path does not exist: " + sourcePath);
+        }
+
+        sourceStats = fs.statSync(sourceFullPath);
+
+        // Create the target's parent directory if it doesn't exist.
+        var parentDir = path.dirname(targetFullPath);
+        if (!fs.existsSync(parentDir)) {
+            shell.mkdir("-p", parentDir);
+        }
+    }
+
+    return updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, options, log);
+}
+
+/**
+ * Updates a target file or directory with a source file or directory. (Directory updates are
+ * not recursive.)
+ *
+ * @param {?string} sourcePath Source file or directory to be used to update the
+ *     destination. If the source is null, then the destination is deleted if it exists.
+ * @param {string} targetPath Required destination file or directory to be updated. If it does
+ *     not exist, it will be created.
+ * @param {Object} [options] Optional additional parameters for the update.
+ * @param {string} [options.rootDir] Optional root directory (such as a project) to which target
+ *     and source path parameters are relative; may be omitted if the paths are absolute. The
+ *     rootDir is always omitted from any logged paths, to make the logs easier to read.
+ * @param {boolean} [options.all] If true, all files are copied regardless of last-modified times.
+ *     Otherwise, a file is copied if the source's last-modified time is greather than or
+ *     equal to the target's last-modified time, or if the file sizes are different.
+ * @param {loggingCallback} [log] Optional logging callback that takes a string message
+ *     describing any file operations that are performed.
+ * @return {boolean} true if any changes were made, or false if the force flag is not set
+ *     and everything was up to date
+ */
+function updatePath(sourcePath, targetPath, options, log) {
+    if (sourcePath !== null && typeof sourcePath !== "string") {
+        throw new Error("A source path (or null) is required.");
+    }
+
+    if (!targetPath || typeof targetPath !== "string") {
+        throw new Error("A target path is required.");
+    }
+
+    log = log || function(message) { };
+
+    return updatePathInternal(sourcePath, targetPath, options, log);
+}
+
+/**
+ * Updates files and directories based on a mapping from target paths to source paths. Targets
+ * with null sources in the map are deleted.
+ *
+ * @param {Object} pathMap A dictionary mapping from target paths to source paths.
+ * @param {Object} [options] Optional additional parameters for the update.
+ * @param {string} [options.rootDir] Optional root directory (such as a project) to which target
+ *     and source path parameters are relative; may be omitted if the paths are absolute. The
+ *     rootDir is always omitted from any logged paths, to make the logs easier to read.
+ * @param {boolean} [options.all] If true, all files are copied regardless of last-modified times.
+ *     Otherwise, a file is copied if the source's last-modified time is greather than or
+ *     equal to the target's last-modified time, or if the file sizes are different.
+ * @param {loggingCallback} [log] Optional logging callback that takes a string message
+ *     describing any file operations that are performed.
+ * @return {boolean} true if any changes were made, or false if the force flag is not set
+ *     and everything was up to date
+ */
+function updatePaths(pathMap, options, log) {
+    if (!pathMap || typeof pathMap !== "object" || Array.isArray(pathMap)) {
+        throw new Error("An object mapping from target paths to source paths is required.");
+    }
+
+    log = log || function(message) { };
+
+    var updated = false;
+
+    // Iterate in sorted order to ensure directories are created before files under them.
+    Object.keys(pathMap).sort().forEach(function (targetPath) {
+        var sourcePath = pathMap[targetPath];
+        updated = updatePathInternal(sourcePath, targetPath, options, log) || updated;
+    });
+
+    return updated;
+}
+
+/**
+ * Updates a target directory with merged files and subdirectories from source directories.
+ *
+ * @param {string|string[]} sourceDirs Required source directory or array of source directories
+ *     to be merged into the target. The directories are listed in order of precedence; files in
+ *     directories later in the array supersede files in directories earlier in the array
+ *     (regardless of timestamps).
+ * @param {string} targetDir Required destination directory to be updated. If it does not exist,
+ *     it will be created. If it exists, newer files from source directories will be copied over,
+ *     and files missing in the source directories will be deleted.
+ * @param {Object} [options] Optional additional parameters for the update.
+ * @param {string} [options.rootDir] Optional root directory (such as a project) to which target
+ *     and source path parameters are relative; may be omitted if the paths are absolute. The
+ *     rootDir is always omitted from any logged paths, to make the logs easier to read.
+ * @param {boolean} [options.all] If true, all files are copied regardless of last-modified times.
+ *     Otherwise, a file is copied if the source's last-modified time is greather than or
+ *     equal to the target's last-modified time, or if the file sizes are different.
+ * @param {string|string[]} [options.include] Optional glob string or array of glob strings that
+ *     are tested against both target and source relative paths to determine if they are included
+ *     in the merge-and-update. If unspecified, all items are included.
+ * @param {string|string[]} [options.exclude] Optional glob string or array of glob strings that
+ *     are tested against both target and source relative paths to determine if they are excluded
+ *     from the merge-and-update. Exclusions override inclusions. If unspecified, no items are
+ *     excluded.
+ * @param {loggingCallback} [log] Optional logging callback that takes a string message
+ *     describing any file operations that are performed.
+ * @return {boolean} true if any changes were made, or false if the force flag is not set
+ *     and everything was up to date
+ */
+function mergeAndUpdateDir(sourceDirs, targetDir, options, log) {
+    if (sourceDirs && typeof sourceDirs === "string") {
+        sourceDirs = [ sourceDirs ];
+    } else if (!Array.isArray(sourceDirs)) {
+        throw new Error("A source directory path or array of paths is required.");
+    }
+
+    if (!targetDir || typeof targetDir !== "string") {
+        throw new Error("A target directory path is required.");
+    }
+
+    log = log || function(message) { };
+
+    var rootDir = (options && options.rootDir) || "";
+
+    var include = (options && options.include) || [ "**" ];
+    if (typeof include === "string") {
+        include = [ include ];
+    } else if (!Array.isArray(include)) {
+        throw new Error("Include parameter must be a glob string or array of glob strings.");
+    }
+
+    var exclude = (options && options.exclude) || [];
+    if (typeof exclude === "string") {
+        exclude = [ exclude ];
+    } else if (!Array.isArray(exclude)) {
+        throw new Error("Exclude parameter must be a glob string or array of glob strings.");
+    }
+
+    // Scan the files in each of the source directories.
+    var sourceMaps = [];
+    for (var i in sourceDirs) {
+        var sourceFullPath = path.join(rootDir, sourceDirs[i]);
+        if (!fs.existsSync(sourceFullPath)) {
+            throw new Error("Source directory does not exist: " + sourceDirs[i]);
+        }
+        sourceMaps[i] = mapDirectory(rootDir, sourceDirs[i], include, exclude);
+    }
+
+    // Scan the files in the target directory, if it exists.
+    var targetMap = {};
+    var targetFullPath = path.join(rootDir, targetDir);
+    if (fs.existsSync(targetFullPath)) {
+        targetMap = mapDirectory(rootDir, targetDir, include, exclude);
+    }
+
+    var pathMap = mergePathMaps(sourceMaps, targetMap, targetDir);
+
+    var updated = false;
+
+    // Iterate in sorted order to ensure directories are created before files under them.
+    Object.keys(pathMap).sort().forEach(function (subPath) {
+        var entry = pathMap[subPath];
+        updated = updatePathWithStats(
+            entry.sourcePath,
+            entry.sourceStats,
+            entry.targetPath,
+            entry.targetStats,
+            options,
+            log) || updated;
+    });
+
+    return updated;
+}
+
+/**
+ * Creates a dictionary map of all files and directories under a path.
+ */
+function mapDirectory(rootDir, subDir, include, exclude) {
+    var dirMap = { "": { subDir: subDir, stats: fs.statSync(path.join(rootDir, subDir)) } };
+    mapSubdirectory(rootDir, subDir, "", include, exclude, dirMap);
+    return dirMap;
+
+    function mapSubdirectory(rootDir, subDir, relativeDir, include, exclude, dirMap) {
+        var itemMapped = false;
+        var items = fs.readdirSync(path.join(rootDir, subDir, relativeDir));
+        for (var i in items) {
+            var relativePath = path.join(relativeDir, items[i]);
+
+            // Skip any files or directories (and everything under) that match an exclude glob.
+            if (matchGlobArray(relativePath, exclude)) {
+                continue;
+            }
+
+            // Stats obtained here (required at least to know where to recurse in directories)
+            // are saved for later, where the modified times may also be used. This minimizes
+            // the number of file I/O operations performed.
+            var fullPath = path.join(rootDir, subDir, relativePath);
+            var stats = fs.statSync(fullPath);
+
+            if (stats.isDirectory()) {
+                // Directories are included if either something under them is included or they
+                // match an include glob.
+                if (mapSubdirectory(rootDir, subDir, relativePath, include, exclude, dirMap) ||
+                        matchGlobArray(relativePath, include)) {
+                    dirMap[relativePath] = { subDir: subDir, stats: stats };
+                    itemMapped = true;
+                }
+            } else if (stats.isFile()) {
+                // Files are included only if they match an include glob.
+                if (matchGlobArray(relativePath, include)) {
+                    dirMap[relativePath] = { subDir: subDir, stats: stats };
+                    itemMapped = true;
+                }
+            }
+        }
+        return itemMapped;
+    }
+
+    function matchGlobArray(path, globs) {
+        for (var i in globs) {
+            if (minimatch(path, globs[i])) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
+
+/**
+ * Merges together multiple source maps and a target map into a single mapping from
+ * relative paths to objects with target and source paths and stats.
+ */
+function mergePathMaps(sourceMaps, targetMap, targetDir) {
+    // Merge multiple source maps together, along with target path info.
+    // Entries in later source maps override those in earlier source maps.
+    // Target stats will be filled in below for targets that exist.
+    var pathMap = {};
+    sourceMaps.forEach(function (sourceMap) {
+        for (var sourceSubPath in sourceMap) {
+            var sourceEntry = sourceMap[sourceSubPath];
+            pathMap[sourceSubPath] = {
+                targetPath: path.join(targetDir, sourceSubPath),
+                targetStats: null,
+                sourcePath: path.join(sourceEntry.subDir, sourceSubPath),
+                sourceStats: sourceEntry.stats
+            };
+        }
+    });
+
+    // Fill in target stats for targets that exist, and create entries
+    // for targets that don't have any corresponding sources.
+    for (var subPath in targetMap) {
+        var entry = pathMap[subPath];
+        if (entry) {
+            entry.targetStats = targetMap[subPath].stats;
+        } else {
+            pathMap[subPath] = {
+                targetPath: path.join(targetDir, subPath),
+                targetStats: targetMap[subPath].stats,
+                sourcePath: null,
+                sourceStats: null
+            };
+        }
+    }
+
+    return pathMap;
+}
+
+module.exports = {
+    updatePath: updatePath,
+    updatePaths: updatePaths,
+    mergeAndUpdateDir: mergeAndUpdateDir
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/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 e1a1b31..77199ec 100644
--- a/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
+++ b/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
@@ -331,7 +331,7 @@ function PluginInfo(dirname) {
     ///// PluginInfo Constructor logic  /////
     self.filepath = path.join(dirname, 'plugin.xml');
     if (!fs.existsSync(self.filepath)) {
-        throw new CordovaError('Cannot find plugin.xml for plugin \'' + path.basename(dirname) + '\'. Please try adding it again.');
+        throw new CordovaError('Cannot find plugin.xml for plugin "' + path.basename(dirname) + '". Please try adding it again.');
     }
 
     self.dir = dirname;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-common/src/events.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/events.js b/node_modules/cordova-common/src/events.js
index 8751976..e702bd8 100644
--- a/node_modules/cordova-common/src/events.js
+++ b/node_modules/cordova-common/src/events.js
@@ -40,7 +40,7 @@ module.exports.forwardEventsTo = function (eventEmitter) {
     }
 
     if (!(eventEmitter instanceof EventEmitter))
-        throw new Error('Cordova events could be redirected to another EventEmitter instance only');
+        throw new Error('Cordova events can be redirected to another EventEmitter instance only');
 
     // CB-10940 Skipping forwarding to self to avoid infinite recursion.
     // This is the case when the modules are npm-linked.

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-common/src/util/addProperty.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-common/src/util/addProperty.js b/node_modules/cordova-common/src/util/addProperty.js
new file mode 100644
index 0000000..7dc4dc1
--- /dev/null
+++ b/node_modules/cordova-common/src/util/addProperty.js
@@ -0,0 +1,32 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+module.exports = function addProperty(module, property, modulePath, obj) {
+    
+    obj = obj || module.exports;
+    // Add properties as getter to delay load the modules on first invocation
+    Object.defineProperty(obj, property, {
+        configurable: true,
+        get: function () {
+            var delayLoadedModule = module.require(modulePath);
+            obj[property] = delayLoadedModule;
+            return delayLoadedModule;
+        }
+    });
+};

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-registry-mapper/.npmignore
----------------------------------------------------------------------
diff --git a/node_modules/cordova-registry-mapper/.npmignore b/node_modules/cordova-registry-mapper/.npmignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/node_modules/cordova-registry-mapper/.npmignore
@@ -0,0 +1 @@
+node_modules

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-registry-mapper/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/cordova-registry-mapper/.travis.yml b/node_modules/cordova-registry-mapper/.travis.yml
new file mode 100644
index 0000000..ae381fc
--- /dev/null
+++ b/node_modules/cordova-registry-mapper/.travis.yml
@@ -0,0 +1,7 @@
+language: node_js
+sudo: false 
+node_js:
+  - "0.10"
+install: npm install
+script:
+  - npm test

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-registry-mapper/README.md
----------------------------------------------------------------------
diff --git a/node_modules/cordova-registry-mapper/README.md b/node_modules/cordova-registry-mapper/README.md
new file mode 100644
index 0000000..3b93e5f
--- /dev/null
+++ b/node_modules/cordova-registry-mapper/README.md
@@ -0,0 +1,14 @@
+[![Build Status](https://travis-ci.org/stevengill/cordova-registry-mapper.svg?branch=master)](https://travis-ci.org/stevengill/cordova-registry-mapper)
+
+#Cordova Registry Mapper
+
+This module is used to map Cordova plugin ids to package names and vice versa.
+
+When Cordova users add plugins to their projects using ids
+(e.g. `cordova plugin add org.apache.cordova.device`),
+this module will map that id to the corresponding package name so `cordova-lib` knows what to fetch from **npm**.
+
+This module was created so the Apache Cordova project could migrate its plugins from
+the [Cordova Registry](http://registry.cordova.io/)
+to [npm](https://registry.npmjs.com/)
+instead of having to maintain a registry.

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-registry-mapper/index.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-registry-mapper/index.js b/node_modules/cordova-registry-mapper/index.js
new file mode 100644
index 0000000..4550774
--- /dev/null
+++ b/node_modules/cordova-registry-mapper/index.js
@@ -0,0 +1,204 @@
+var map = {
+    'org.apache.cordova.battery-status':'cordova-plugin-battery-status',
+    'org.apache.cordova.camera':'cordova-plugin-camera',
+    'org.apache.cordova.console':'cordova-plugin-console',
+    'org.apache.cordova.contacts':'cordova-plugin-contacts',
+    'org.apache.cordova.device':'cordova-plugin-device',
+    'org.apache.cordova.device-motion':'cordova-plugin-device-motion',
+    'org.apache.cordova.device-orientation':'cordova-plugin-device-orientation',
+    'org.apache.cordova.dialogs':'cordova-plugin-dialogs',
+    'org.apache.cordova.file':'cordova-plugin-file',
+    'org.apache.cordova.file-transfer':'cordova-plugin-file-transfer',
+    'org.apache.cordova.geolocation':'cordova-plugin-geolocation',
+    'org.apache.cordova.globalization':'cordova-plugin-globalization',
+    'org.apache.cordova.inappbrowser':'cordova-plugin-inappbrowser',
+    'org.apache.cordova.media':'cordova-plugin-media',
+    'org.apache.cordova.media-capture':'cordova-plugin-media-capture',
+    'org.apache.cordova.network-information':'cordova-plugin-network-information',
+    'org.apache.cordova.splashscreen':'cordova-plugin-splashscreen',
+    'org.apache.cordova.statusbar':'cordova-plugin-statusbar',
+    'org.apache.cordova.vibration':'cordova-plugin-vibration',
+    'org.apache.cordova.test-framework':'cordova-plugin-test-framework',
+    'com.msopentech.websql' : 'cordova-plugin-websql',
+    'com.msopentech.indexeddb' : 'cordova-plugin-indexeddb',
+    'com.microsoft.aad.adal' : 'cordova-plugin-ms-adal',
+    'com.microsoft.capptain' : 'capptain-cordova',
+    'com.microsoft.services.aadgraph' : 'cordova-plugin-ms-aad-graph',
+    'com.microsoft.services.files' : 'cordova-plugin-ms-files',
+    'om.microsoft.services.outlook' : 'cordova-plugin-ms-outlook',
+    'com.pbakondy.sim' : 'cordova-plugin-sim',
+    'android.support.v4' : 'cordova-plugin-android-support-v4',
+    'android.support.v7-appcompat' : 'cordova-plugin-android-support-v7-appcompat',
+    'com.google.playservices' : 'cordova-plugin-googleplayservices',
+    'com.google.cordova.admob' : 'cordova-plugin-admobpro',
+    'com.rjfun.cordova.extension' : 'cordova-plugin-extension',
+    'com.rjfun.cordova.plugin.admob' : 'cordova-plugin-admob',
+    'com.rjfun.cordova.flurryads' : 'cordova-plugin-flurry',
+    'com.rjfun.cordova.facebookads' : 'cordova-plugin-facebookads',
+    'com.rjfun.cordova.httpd' : 'cordova-plugin-httpd',
+    'com.rjfun.cordova.iad' : 'cordova-plugin-iad',
+    'com.rjfun.cordova.iflyspeech' : 'cordova-plugin-iflyspeech',
+    'com.rjfun.cordova.lianlianpay' : 'cordova-plugin-lianlianpay',
+    'com.rjfun.cordova.mobfox' : 'cordova-plugin-mobfox',
+    'com.rjfun.cordova.mopub' : 'cordova-plugin-mopub',
+    'com.rjfun.cordova.mmedia' : 'cordova-plugin-mmedia',
+    'com.rjfun.cordova.nativeaudio' : 'cordova-plugin-nativeaudio',
+    'com.rjfun.cordova.plugin.paypalmpl' : 'cordova-plugin-paypalmpl',
+    'com.rjfun.cordova.smartadserver' : 'cordova-plugin-smartadserver',
+    'com.rjfun.cordova.sms' : 'cordova-plugin-sms',
+    'com.rjfun.cordova.wifi' : 'cordova-plugin-wifi',
+    'com.ohh2ahh.plugins.appavailability' : 'cordova-plugin-appavailability',
+    'org.adapt-it.cordova.fonts' : 'cordova-plugin-fonts',
+    'de.martinreinhardt.cordova.plugins.barcodeScanner' : 'cordova-plugin-barcodescanner',
+    'de.martinreinhardt.cordova.plugins.urlhandler' : 'cordova-plugin-urlhandler',
+    'de.martinreinhardt.cordova.plugins.email' : 'cordova-plugin-email',
+    'de.martinreinhardt.cordova.plugins.certificates' : 'cordova-plugin-certificates',
+    'de.martinreinhardt.cordova.plugins.sqlite' : 'cordova-plugin-sqlite',
+    'fr.smile.cordova.fileopener' : 'cordova-plugin-fileopener',
+    'org.smile.websqldatabase.initializer' : 'cordova-plugin-websqldatabase-initializer',
+    'org.smile.websqldatabase.wpdb' : 'cordova-plugin-websqldatabase',
+    'org.jboss.aerogear.cordova.push' : 'aerogear-cordova-push',
+    'org.jboss.aerogear.cordova.oauth2' : 'aerogear-cordova-oauth2',
+    'org.jboss.aerogear.cordova.geo' : 'aerogear-cordova-geo',
+    'org.jboss.aerogear.cordova.crypto' : 'aerogear-cordova-crypto',
+    'org.jboss.aerogaer.cordova.otp' : 'aerogear-cordova-otp',
+    'uk.co.ilee.applewatch' : 'cordova-plugin-apple-watch',
+    'uk.co.ilee.directions' : 'cordova-plugin-directions',
+    'uk.co.ilee.gamecenter' : 'cordova-plugin-game-center',
+    'uk.co.ilee.jailbreakdetection' : 'cordova-plugin-jailbreak-detection',
+    'uk.co.ilee.nativetransitions' : 'cordova-plugin-native-transitions',
+    'uk.co.ilee.pedometer' : 'cordova-plugin-pedometer',
+    'uk.co.ilee.shake' : 'cordova-plugin-shake',
+    'uk.co.ilee.touchid' : 'cordova-plugin-touchid',
+    'com.knowledgecode.cordova.websocket' : 'cordova-plugin-websocket',
+    'com.elixel.plugins.settings' : 'cordova-plugin-settings',
+    'com.cowbell.cordova.geofence' : 'cordova-plugin-geofence',
+    'com.blackberry.community.preventsleep' : 'cordova-plugin-preventsleep',
+    'com.blackberry.community.gamepad' : 'cordova-plugin-gamepad',
+    'com.blackberry.community.led' : 'cordova-plugin-led',
+    'com.blackberry.community.thumbnail' : 'cordova-plugin-thumbnail',
+    'com.blackberry.community.mediakeys' : 'cordova-plugin-mediakeys',
+    'com.blackberry.community.simplebtlehrplugin' : 'cordova-plugin-bluetoothheartmonitor',
+    'com.blackberry.community.simplebeaconplugin' : 'cordova-plugin-bluetoothibeacon',
+    'com.blackberry.community.simplebtsppplugin' : 'cordova-plugin-bluetoothspp',
+    'com.blackberry.community.clipboard' : 'cordova-plugin-clipboard',
+    'com.blackberry.community.curl' : 'cordova-plugin-curl',
+    'com.blackberry.community.qt' : 'cordova-plugin-qtbridge',
+    'com.blackberry.community.upnp' : 'cordova-plugin-upnp',
+    'com.blackberry.community.PasswordCrypto' : 'cordova-plugin-password-crypto',
+    'com.blackberry.community.deviceinfoplugin' : 'cordova-plugin-deviceinfo',
+    'com.blackberry.community.gsecrypto' : 'cordova-plugin-bb-crypto',
+    'com.blackberry.community.mongoose' : 'cordova-plugin-mongoose',
+    'com.blackberry.community.sysdialog' : 'cordova-plugin-bb-sysdialog',
+    'com.blackberry.community.screendisplay' : 'cordova-plugin-screendisplay',
+    'com.blackberry.community.messageplugin' : 'cordova-plugin-bb-messageretrieve',
+    'com.blackberry.community.emailsenderplugin' : 'cordova-plugin-emailsender',
+    'com.blackberry.community.audiometadata' : 'cordova-plugin-audiometadata',
+    'com.blackberry.community.deviceemails' : 'cordova-plugin-deviceemails',
+    'com.blackberry.community.audiorecorder' : 'cordova-plugin-audiorecorder',
+    'com.blackberry.community.vibration' : 'cordova-plugin-vibrate-intense',
+    'com.blackberry.community.SMSPlugin' : 'cordova-plugin-bb-sms',
+    'com.blackberry.community.extractZipFile' : 'cordova-plugin-bb-zip',
+    'com.blackberry.community.lowlatencyaudio' : 'cordova-plugin-bb-nativeaudio',
+    'com.blackberry.community.barcodescanner' : 'phonegap-plugin-barcodescanner',
+    'com.blackberry.app' : 'cordova-plugin-bb-app',
+    'com.blackberry.bbm.platform' : 'cordova-plugin-bbm',
+    'com.blackberry.connection' : 'cordova-plugin-bb-connection',
+    'com.blackberry.identity' : 'cordova-plugin-bb-identity',
+    'com.blackberry.invoke.card' : 'cordova-plugin-bb-card',
+    'com.blackberry.invoke' : 'cordova-plugin-bb-invoke',
+    'com.blackberry.invoked' : 'cordova-plugin-bb-invoked',
+    'com.blackberry.io.filetransfer' : 'cordova-plugin-bb-filetransfer',
+    'com.blackberry.io' : 'cordova-plugin-bb-io',
+    'com.blackberry.notification' : 'cordova-plugin-bb-notification',
+    'com.blackberry.payment' : 'cordova-plugin-bb-payment',
+    'com.blackberry.pim.calendar' : 'cordova-plugin-bb-calendar',
+    'com.blackberry.pim.contacts' : 'cordova-plugin-bb-contacts',
+    'com.blackberry.pim.lib' : 'cordova-plugin-bb-pimlib',
+    'com.blackberry.push' : 'cordova-plugin-bb-push',
+    'com.blackberry.screenshot' : 'cordova-plugin-screenshot',
+    'com.blackberry.sensors' : 'cordova-plugin-bb-sensors',
+    'com.blackberry.system' : 'cordova-plugin-bb-system',
+    'com.blackberry.ui.contextmenu' : 'cordova-plugin-bb-ctxmenu',
+    'com.blackberry.ui.cover' : 'cordova-plugin-bb-cover',
+    'com.blackberry.ui.dialog' : 'cordova-plugin-bb-dialog',
+    'com.blackberry.ui.input' : 'cordova-plugin-touch-keyboard',
+    'com.blackberry.ui.toast' : 'cordova-plugin-toast',
+    'com.blackberry.user.identity' : 'cordova-plugin-bb-idservice',
+    'com.blackberry.utils' : 'cordova-plugin-bb-utils',
+    'net.yoik.cordova.plugins.screenorientation' : 'cordova-plugin-screen-orientation',
+    'com.phonegap.plugins.barcodescanner' : 'phonegap-plugin-barcodescanner',
+    'com.manifoldjs.hostedwebapp' : 'cordova-plugin-hostedwebapp',
+    'com.initialxy.cordova.themeablebrowser' : 'cordova-plugin-themeablebrowser',
+    'gr.denton.photosphere' : 'cordova-plugin-panoramaviewer',
+    'nl.x-services.plugins.actionsheet' : 'cordova-plugin-actionsheet',
+    'nl.x-services.plugins.socialsharing' : 'cordova-plugin-x-socialsharing',
+    'nl.x-services.plugins.googleplus' : 'cordova-plugin-googleplus',
+    'nl.x-services.plugins.insomnia' : 'cordova-plugin-insomnia',
+    'nl.x-services.plugins.toast' : 'cordova-plugin-x-toast',
+    'nl.x-services.plugins.calendar' : 'cordova-plugin-calendar',
+    'nl.x-services.plugins.launchmyapp' : 'cordova-plugin-customurlscheme',
+    'nl.x-services.plugins.flashlight' : 'cordova-plugin-flashlight',
+    'nl.x-services.plugins.sslcertificatechecker' : 'cordova-plugin-sslcertificatechecker',
+    'com.bridge.open' : 'cordova-open',
+    'com.bridge.safe' : 'cordova-safe',
+    'com.disusered.open' : 'cordova-open',
+    'com.disusered.safe' : 'cordova-safe',
+    'me.apla.cordova.app-preferences' : 'cordova-plugin-app-preferences',
+    'com.konotor.cordova' : 'cordova-plugin-konotor',
+    'io.intercom.cordova' : 'cordova-plugin-intercom',
+    'com.onesignal.plugins.onesignal' : 'onesignal-cordova-plugin',
+    'com.danjarvis.document-contract': 'cordova-plugin-document-contract',
+    'com.eface2face.iosrtc' : 'cordova-plugin-iosrtc',
+    'com.mobileapptracking.matplugin' : 'cordova-plugin-tune',
+    'com.marianhello.cordova.background-geolocation' : 'cordova-plugin-mauron85-background-geolocation',
+    'fr.louisbl.cordova.locationservices' : 'cordova-plugin-locationservices',
+    'fr.louisbl.cordova.gpslocation' : 'cordova-plugin-gpslocation',
+    'com.hiliaox.weibo' : 'cordova-plugin-weibo',
+    'com.uxcam.cordova.plugin' : 'cordova-uxcam',
+    'de.fastr.phonegap.plugins.downloader' : 'cordova-plugin-fastrde-downloader',
+    'de.fastr.phonegap.plugins.injectView' : 'cordova-plugin-fastrde-injectview',
+    'de.fastr.phonegap.plugins.CheckGPS' : 'cordova-plugin-fastrde-checkgps',
+    'de.fastr.phonegap.plugins.md5chksum' : 'cordova-plugin-fastrde-md5',
+    'io.repro.cordova' : 'cordova-plugin-repro',
+    're.notifica.cordova': 'cordova-plugin-notificare-push',
+    'com.megster.cordova.ble': 'cordova-plugin-ble-central',
+    'com.megster.cordova.bluetoothserial': 'cordova-plugin-bluetooth-serial',
+    'com.megster.cordova.rfduino': 'cordova-plugin-rfduino',
+    'cz.velda.cordova.plugin.devicefeedback': 'cordova-plugin-velda-devicefeedback',
+    'cz.Velda.cordova.plugin.devicefeedback': 'cordova-plugin-velda-devicefeedback',
+    'org.scriptotek.appinfo': 'cordova-plugin-appinfo',
+    'com.yezhiming.cordova.appinfo': 'cordova-plugin-appinfo',
+    'pl.makingwaves.estimotebeacons': 'cordova-plugin-estimote',
+    'com.evothings.ble': 'cordova-plugin-ble',
+    'com.appsee.plugin' : 'cordova-plugin-appsee',
+    'am.armsoft.plugins.listpicker': 'cordova-plugin-listpicker',
+    'com.pushbots.push': 'pushbots-cordova-plugin',
+    'com.admob.google': 'cordova-admob',
+    'admob.ads.google': 'cordova-admob-ads',
+    'admob.google.plugin': 'admob-google',
+    'com.admob.admobads': 'admob-ads',
+    'com.connectivity.monitor': 'cordova-connectivity-monitor',
+    'com.ios.libgoogleadmobads': 'cordova-libgoogleadmobads',
+    'com.google.play.services': 'cordova-google-play-services',
+    'android.support.v13': 'cordova-android-support-v13',
+    'android.support.v4': 'cordova-android-support-v4', // Duplicated key ;)
+    'com.analytics.google': 'cordova-plugin-analytics',
+    'com.analytics.adid.google': 'cordova-plugin-analytics-adid',
+    'com.chariotsolutions.nfc.plugin': 'phonegap-nfc',
+    'com.samz.mixpanel': 'cordova-plugin-mixpanel',
+    'de.appplant.cordova.common.RegisterUserNotificationSettings': 'cordova-plugin-registerusernotificationsettings',
+    'plugin.google.maps': 'cordova-plugin-googlemaps',
+    'xu.li.cordova.wechat': 'cordova-plugin-wechat',
+    'es.keensoft.fullscreenimage': 'cordova-plugin-fullscreenimage',
+    'com.arcoirislabs.plugin.mqtt' : 'cordova-plugin-mqtt'
+};
+
+module.exports.oldToNew = map;
+
+var reverseMap = {};
+Object.keys(map).forEach(function(elem){
+    reverseMap[map[elem]] = elem;
+});
+
+module.exports.newToOld = reverseMap;

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-registry-mapper/package.json
----------------------------------------------------------------------
diff --git a/node_modules/cordova-registry-mapper/package.json b/node_modules/cordova-registry-mapper/package.json
new file mode 100644
index 0000000..592e202
--- /dev/null
+++ b/node_modules/cordova-registry-mapper/package.json
@@ -0,0 +1,77 @@
+{
+  "_args": [
+    [
+      "cordova-registry-mapper@^1.1.8",
+      "D:\\Cordova\\cordova-windows\\node_modules\\cordova-common"
+    ]
+  ],
+  "_from": "cordova-registry-mapper@>=1.1.8 <2.0.0",
+  "_id": "cordova-registry-mapper@1.1.15",
+  "_inCache": true,
+  "_installable": true,
+  "_location": "/cordova-registry-mapper",
+  "_nodeVersion": "5.4.1",
+  "_npmUser": {
+    "email": "stevengill97@gmail.com",
+    "name": "stevegill"
+  },
+  "_npmVersion": "3.5.3",
+  "_phantomChildren": {},
+  "_requested": {
+    "name": "cordova-registry-mapper",
+    "raw": "cordova-registry-mapper@^1.1.8",
+    "rawSpec": "^1.1.8",
+    "scope": null,
+    "spec": ">=1.1.8 <2.0.0",
+    "type": "range"
+  },
+  "_requiredBy": [
+    "/cordova-common"
+  ],
+  "_resolved": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
+  "_shasum": "e244b9185b8175473bff6079324905115f83dc7c",
+  "_shrinkwrap": null,
+  "_spec": "cordova-registry-mapper@^1.1.8",
+  "_where": "D:\\Cordova\\cordova-windows\\node_modules\\cordova-common",
+  "author": {
+    "name": "Steve Gill"
+  },
+  "bugs": {
+    "url": "https://github.com/stevengill/cordova-registry-mapper/issues"
+  },
+  "dependencies": {},
+  "description": "Maps old plugin ids to new plugin names for fetching from npm",
+  "devDependencies": {
+    "tape": "^3.5.0"
+  },
+  "directories": {},
+  "dist": {
+    "shasum": "e244b9185b8175473bff6079324905115f83dc7c",
+    "tarball": "http://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz"
+  },
+  "gitHead": "00af0f028ec94154a364eeabe38b8e22320647bd",
+  "homepage": "https://github.com/stevengill/cordova-registry-mapper#readme",
+  "keywords": [
+    "cordova",
+    "plugins"
+  ],
+  "license": "Apache version 2.0",
+  "main": "index.js",
+  "maintainers": [
+    {
+      "email": "stevengill97@gmail.com",
+      "name": "stevegill"
+    }
+  ],
+  "name": "cordova-registry-mapper",
+  "optionalDependencies": {},
+  "readme": "ERROR: No README data found!",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/stevengill/cordova-registry-mapper.git"
+  },
+  "scripts": {
+    "test": "node tests/test.js"
+  },
+  "version": "1.1.15"
+}

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/cordova-registry-mapper/tests/test.js
----------------------------------------------------------------------
diff --git a/node_modules/cordova-registry-mapper/tests/test.js b/node_modules/cordova-registry-mapper/tests/test.js
new file mode 100644
index 0000000..35343be
--- /dev/null
+++ b/node_modules/cordova-registry-mapper/tests/test.js
@@ -0,0 +1,11 @@
+var test = require('tape');
+var oldToNew = require('../index').oldToNew;
+var newToOld = require('../index').newToOld;
+
+test('plugin mappings exist', function(t) {
+    t.plan(2);
+
+    t.equal('cordova-plugin-device', oldToNew['org.apache.cordova.device']);
+
+    t.equal('org.apache.cordova.device', newToOld['cordova-plugin-device']);
+})

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/elementtree/node_modules/sax/AUTHORS
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/AUTHORS b/node_modules/elementtree/node_modules/sax/AUTHORS
deleted file mode 100644
index 26d8659..0000000
--- a/node_modules/elementtree/node_modules/sax/AUTHORS
+++ /dev/null
@@ -1,9 +0,0 @@
-# contributors sorted by whether or not they're me.
-Isaac Z. Schlueter <i...@izs.me>
-Stein Martin Hustad <st...@hustad.com>
-Mikeal Rogers <mi...@gmail.com>
-Laurie Harper <la...@holoweb.net>
-Jann Horn <ja...@Jann-PC.fritz.box>
-Elijah Insua <tm...@gmail.com>
-Henry Rawas <he...@schakra.com>
-Justin Makeig <jm...@makeig.com>

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

http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/5a6cb728/node_modules/elementtree/node_modules/sax/README.md
----------------------------------------------------------------------
diff --git a/node_modules/elementtree/node_modules/sax/README.md b/node_modules/elementtree/node_modules/sax/README.md
deleted file mode 100644
index 9c63dc4..0000000
--- a/node_modules/elementtree/node_modules/sax/README.md
+++ /dev/null
@@ -1,213 +0,0 @@
-# sax js
-
-A sax-style parser for XML and HTML.
-
-Designed with [node](http://nodejs.org/) in mind, but should work fine in
-the browser or other CommonJS implementations.
-
-## What This Is
-
-* A very simple tool to parse through an XML string.
-* A stepping stone to a streaming HTML parser.
-* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML 
-  docs.
-
-## What This Is (probably) Not
-
-* An HTML Parser - That's a fine goal, but this isn't it.  It's just
-  XML.
-* A DOM Builder - You can use it to build an object model out of XML,
-  but it doesn't do that out of the box.
-* XSLT - No DOM = no querying.
-* 100% Compliant with (some other SAX implementation) - Most SAX
-  implementations are in Java and do a lot more than this does.
-* An XML Validator - It does a little validation when in strict mode, but
-  not much.
-* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic 
-  masochism.
-* A DTD-aware Thing - Fetching DTDs is a much bigger job.
-
-## Regarding `<!DOCTYPE`s and `<!ENTITY`s
-
-The parser will handle the basic XML entities in text nodes and attribute
-values: `&amp; &lt; &gt; &apos; &quot;`. It's possible to define additional
-entities in XML by putting them in the DTD. This parser doesn't do anything
-with that. If you want to listen to the `ondoctype` event, and then fetch
-the doctypes, and read the entities and add them to `parser.ENTITIES`, then
-be my guest.
-
-Unknown entities will fail in strict mode, and in loose mode, will pass
-through unmolested.
-
-## Usage
-
-    var sax = require("./lib/sax"),
-      strict = true, // set to false for html-mode
-      parser = sax.parser(strict);
-
-    parser.onerror = function (e) {
-      // an error happened.
-    };
-    parser.ontext = function (t) {
-      // got some text.  t is the string of text.
-    };
-    parser.onopentag = function (node) {
-      // opened a tag.  node has "name" and "attributes"
-    };
-    parser.onattribute = function (attr) {
-      // an attribute.  attr has "name" and "value"
-    };
-    parser.onend = function () {
-      // parser stream is done, and ready to have more stuff written to it.
-    };
-
-    parser.write('<xml>Hello, <who name="world">world</who>!</xml>').close();
-
-    // stream usage
-    // takes the same options as the parser
-    var saxStream = require("sax").createStream(strict, options)
-    saxStream.on("error", function (e) {
-      // unhandled errors will throw, since this is a proper node
-      // event emitter.
-      console.error("error!", e)
-      // clear the error
-      this._parser.error = null
-      this._parser.resume()
-    })
-    saxStream.on("opentag", function (node) {
-      // same object as above
-    })
-    // pipe is supported, and it's readable/writable
-    // same chunks coming in also go out.
-    fs.createReadStream("file.xml")
-      .pipe(saxStream)
-      .pipe(fs.createReadStream("file-copy.xml"))
-
-
-
-## Arguments
-
-Pass the following arguments to the parser function.  All are optional.
-
-`strict` - Boolean. Whether or not to be a jerk. Default: `false`.
-
-`opt` - Object bag of settings regarding string formatting.  All default to `false`.
-
-Settings supported:
-
-* `trim` - Boolean. Whether or not to trim text and comment nodes.
-* `normalize` - Boolean. If true, then turn any whitespace into a single
-  space.
-* `lowercasetags` - Boolean. If true, then lowercase tags in loose mode, 
-  rather than uppercasing them.
-* `xmlns` - Boolean. If true, then namespaces are supported.
-
-## Methods
-
-`write` - Write bytes onto the stream. You don't have to do this all at
-once. You can keep writing as much as you want.
-
-`close` - Close the stream. Once closed, no more data may be written until
-it is done processing the buffer, which is signaled by the `end` event.
-
-`resume` - To gracefully handle errors, assign a listener to the `error`
-event. Then, when the error is taken care of, you can call `resume` to
-continue parsing. Otherwise, the parser will not continue while in an error
-state.
-
-## Members
-
-At all times, the parser object will have the following members:
-
-`line`, `column`, `position` - Indications of the position in the XML
-document where the parser currently is looking.
-
-`startTagPosition` - Indicates the position where the current tag starts.
-
-`closed` - Boolean indicating whether or not the parser can be written to.
-If it's `true`, then wait for the `ready` event to write again.
-
-`strict` - Boolean indicating whether or not the parser is a jerk.
-
-`opt` - Any options passed into the constructor.
-
-`tag` - The current tag being dealt with.
-
-And a bunch of other stuff that you probably shouldn't touch.
-
-## Events
-
-All events emit with a single argument. To listen to an event, assign a
-function to `on<eventname>`. Functions get executed in the this-context of
-the parser object. The list of supported events are also in the exported
-`EVENTS` array.
-
-When using the stream interface, assign handlers using the EventEmitter
-`on` function in the normal fashion.
-
-`error` - Indication that something bad happened. The error will be hanging
-out on `parser.error`, and must be deleted before parsing can continue. By
-listening to this event, you can keep an eye on that kind of stuff. Note:
-this happens *much* more in strict mode. Argument: instance of `Error`.
-
-`text` - Text node. Argument: string of text.
-
-`doctype` - The `<!DOCTYPE` declaration. Argument: doctype string.
-
-`processinginstruction` - Stuff like `<?xml foo="blerg" ?>`. Argument:
-object with `name` and `body` members. Attributes are not parsed, as
-processing instructions have implementation dependent semantics.
-
-`sgmldeclaration` - Random SGML declarations. Stuff like `<!ENTITY p>`
-would trigger this kind of event. This is a weird thing to support, so it
-might go away at some point. SAX isn't intended to be used to parse SGML,
-after all.
-
-`opentag` - An opening tag. Argument: object with `name` and `attributes`.
-In non-strict mode, tag names are uppercased, unless the `lowercasetags`
-option is set.  If the `xmlns` option is set, then it will contain
-namespace binding information on the `ns` member, and will have a
-`local`, `prefix`, and `uri` member.
-
-`closetag` - A closing tag. In loose mode, tags are auto-closed if their
-parent closes. In strict mode, well-formedness is enforced. Note that
-self-closing tags will have `closeTag` emitted immediately after `openTag`.
-Argument: tag name.
-
-`attribute` - An attribute node.  Argument: object with `name` and `value`,
-and also namespace information if the `xmlns` option flag is set.
-
-`comment` - A comment node.  Argument: the string of the comment.
-
-`opencdata` - The opening tag of a `<![CDATA[` block.
-
-`cdata` - The text of a `<![CDATA[` block. Since `<![CDATA[` blocks can get
-quite large, this event may fire multiple times for a single block, if it
-is broken up into multiple `write()`s. Argument: the string of random
-character data.
-
-`closecdata` - The closing tag (`]]>`) of a `<![CDATA[` block.
-
-`opennamespace` - If the `xmlns` option is set, then this event will
-signal the start of a new namespace binding.
-
-`closenamespace` - If the `xmlns` option is set, then this event will
-signal the end of a namespace binding.
-
-`end` - Indication that the closed stream has ended.
-
-`ready` - Indication that the stream has reset, and is ready to be written
-to.
-
-`noscript` - In non-strict mode, `<script>` tags trigger a `"script"`
-event, and their contents are not checked for special xml characters.
-If you pass `noscript: true`, then this behavior is suppressed.
-
-## Reporting Problems
-
-It's best to write a failing test if you find an issue.  I will always
-accept pull requests with failing tests if they demonstrate intended
-behavior, but it is very hard to figure out what issue you're describing
-without a test.  Writing a test is also the best way for you yourself
-to figure out if you really understand the issue you think you have with
-sax-js.


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