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 2014/09/23 00:05:32 UTC

[1/6] Revert "Revert "Merge branch 'browserPlatform' of https://github.com/surajpindoria/cordova-lib""

Repository: cordova-lib
Updated Branches:
  refs/heads/master 2c3817e90 -> 2aace451a


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/restore.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/restore.js b/cordova-lib/src/cordova/restore.js
index ffd1edc..6e4d262 100644
--- a/cordova-lib/src/cordova/restore.js
+++ b/cordova-lib/src/cordova/restore.js
@@ -60,39 +60,41 @@ function installPlatformsFromConfigXML(cfg){
 //returns a Promise
 function installPluginsFromConfigXML(cfg) {
     //Install plugins that are listed on config.xml
-    var pluginsFromConfig = [];
     var projectRoot = cordova_util.cdProjectRoot();
     var plugins_dir = path.join(projectRoot, 'plugins');
 
-    var features = cfg.doc.findall('feature');
-    features.forEach(function(feature){
-        var params = feature.findall('param');
-        var pluginId = '';
-        var pluginVersion = '';
-        for (var i = 0; i < params.length; i++) {
-            if (params[i].attrib.name === 'id') {
-                pluginId = params[i].attrib.value;
-            }
-            if (params[i].attrib.name === 'version') {
-                pluginVersion = params[i].attrib.value;
-            }
+    // Get all configured plugins
+    var features = cfg.getFeatureIdList();
+    if (0 === features.length) {
+        return Q.all('No config.xml plugins to install');
+    }
+
+    return features.reduce(function(soFar, featureId) {
+
+        var pluginPath =  path.join(plugins_dir, featureId);
+        if (fs.existsSync(pluginPath)) {
+            // Plugin already exists
+            return soFar;
         }
-        var pluginPath =  path.join(plugins_dir,pluginId);
-        // contents of the plugins folder takes precedence hence
-        // we ignore if the correct version is installed or not.
-        if (pluginId !== '' && !fs.existsSync(pluginPath)) {
-            if ( pluginVersion !== '') {
-                pluginId = pluginId + '@' + pluginVersion;
+
+        return soFar.then(function() {
+            events.emit('log', 'Discovered ' + featureId + ' in config.xml. Installing to the project');
+
+            var feature = cfg.getFeature(featureId);
+
+            // Install from given URL if defined or using a plugin id
+            var installFrom = feature.url;
+            if (!installFrom) {
+                installFrom = feature.id;
+                if (!!feature.version) {
+                    installFrom += ('@' + feature.version);
+                }
             }
-            events.emit('log', 'Discovered ' + pluginId + ' in config.xml. Installing to the project');
-            pluginsFromConfig.push(pluginId);
-        }
-    });
 
-    //Use cli instead of plugman directly ensuring all the hooks
-    // to get fired.
-    if (pluginsFromConfig.length >0) {
-        return plugin('add', pluginsFromConfig);
-    }
-    return Q.all('No config.xml plugins to install');
+            // Add feature preferences as CLI variables if have any
+            var options = 'undefined' !== typeof feature.variables ? {cli_variables: feature.variables} : null;
+
+            return plugin('add', installFrom, options);
+        });
+    }, Q());
 }

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/superspawn.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/superspawn.js b/cordova-lib/src/cordova/superspawn.js
index b35e311..51a4d6b 100644
--- a/cordova-lib/src/cordova/superspawn.js
+++ b/cordova-lib/src/cordova/superspawn.js
@@ -141,3 +141,10 @@ exports.spawn = function(cmd, args, opts) {
     return d.promise;
 };
 
+exports.maybeSpawn = function(cmd, args, opts) {
+    if (fs.existsSync(cmd)) {
+        return exports.spawn(cmd, args, opts);
+    }
+    return Q(null);
+};
+

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/create.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/create.js b/cordova-lib/src/plugman/create.js
index 684b126..a63ffea 100644
--- a/cordova-lib/src/plugman/create.js
+++ b/cordova-lib/src/plugman/create.js
@@ -37,38 +37,38 @@ module.exports = function create( name, id, version, pluginPath, options ) {
         clobber,
         jsMod;
 
-    //check we are not already in a plugin
+    // Check we are not already in a plugin
     if( fs.existsSync( cwd + 'plugin.xml' ) ) {
         return Q.reject( new CordovaError( 'plugin.xml already exists. Are you already in a plugin?' ) );
     }
 
-    //Create a plugin.xml file
+    // Create a plugin.xml file
     root = et.Element( 'plugin' );
     root.set( 'xmlns', 'http://apache.org/cordova/ns/plugins/1.0' );
     root.set( 'xmlns:android', 'http://schemas.android.com/apk/res/android' );
     root.set( 'id', id );
     root.set( 'version', version );
 
-    //Add the name tag
+    // Add the name tag
     pluginName = et.XML( '<name>' );
     pluginName.text = name;
     root.append( pluginName );
 
-    //loop through the options( variables ) for other tags
+    // Loop through the options( variables ) for other tags
     for( var key in options ) {
         var temp = et.XML( '<' + key + '>');
         temp.text = options[ key ];
         root.append( temp );
     }
 
-    //setup the directory structure
+    // Setup the directory structure
     shell.mkdir( '-p', cwd + 'www' );
     shell.mkdir( '-p', cwd + 'src' );
 
-    //create a base plugin.js file
+    // Create a base plugin.js file
     baseJS = fs.readFileSync( templatesDir + 'base.js', 'utf-8').replace( /%pluginName%/g, name );
     fs.writeFileSync( cwd + 'www/' + name + '.js', baseJS, 'utf-8' );
-    //Add it to the xml as a js module
+    // Add it to the xml as a js module
     jsMod = et.Element( 'js-module' );
     jsMod.set( 'src', 'www/' + name + '.js' );
     jsMod.set( 'name', name );
@@ -79,7 +79,7 @@ module.exports = function create( name, id, version, pluginPath, options ) {
 
     root.append( jsMod );
 
-    //Write out the plugin.xml file
+    // Write out the plugin.xml file
     fs.writeFileSync( cwd + 'plugin.xml', new et.ElementTree( root ).write( {indent: 4} ), 'utf-8' );
 
     return Q();

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/install.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/install.js b/cordova-lib/src/plugman/install.js
index 83834b4..045afb7 100644
--- a/cordova-lib/src/plugman/install.js
+++ b/cordova-lib/src/plugman/install.js
@@ -512,19 +512,19 @@ function handleInstall(actions, pluginInfo, platform, project_dir, plugins_dir,
     var handler = platform_modules[platform];
 
     var platformTag = pluginInfo._et.find('./platform[@name="'+platform+'"]');
+
     // CB-6976 Windows Universal Apps. For smooth transition and to prevent mass api failures
     // we allow using windows8 tag for new windows platform
     if (platform == 'windows' && !platformTag) {
         platformTag = pluginInfo._et.find('platform[@name="' + 'windows8' + '"]');
     }
-    if ( pluginInfo.hasPlatformSection(platform) ) {
+    if (platformTag) {
         var sourceFiles = platformTag.findall('./source-file'),
             headerFiles = platformTag.findall('./header-file'),
             resourceFiles = platformTag.findall('./resource-file'),
             frameworkFiles = platformTag.findall('./framework'),
             libFiles = platformTag.findall('./lib-file');
 
-
         // queue up native stuff
         sourceFiles && sourceFiles.forEach(function(item) {
             actions.push(actions.createAction(handler['source-file'].install,

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/platform.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platform.js b/cordova-lib/src/plugman/platform.js
index 414e975..8761986 100644
--- a/cordova-lib/src/plugman/platform.js
+++ b/cordova-lib/src/plugman/platform.js
@@ -33,23 +33,23 @@ module.exports = {
         var pluginxml,
             platform;
 
-        //check to make sure we are in the plugin first
+        // Check to make sure we are in the plugin first
         if( !fs.existsSync( 'plugin.xml' ) ) {
             return Q.reject( new Error( "can't find a plugin.xml.  Are you in the plugin?" ) );
         }
 
-        //Get the current plugin.xml file
+        // Get the current plugin.xml file
         pluginxml = et.parse( fs.readFileSync('plugin.xml', 'utf-8') );
 
-        //Check if this platform exists
+        // Check if this platform exists
         if( pluginxml.find("./platform/[@name='"+ platformName +"']") ) {
             return Q.reject( new Error( "platform: " + platformName + " already added"  ) );
         }
 
-        //Get the platform specific elements
+        // Get the platform specific elements
         platform = doPlatform( platformName, pluginxml.find("./name").text, pluginxml.getroot().get( "id" ) );
 
-        //Make sure we support it
+        // Make sure we support it
         if( !platform ) {
             return Q.reject( new Error( "platform: " + platformName + " not yet supported"  ) );
         }
@@ -60,26 +60,26 @@ module.exports = {
         return Q();
     },
     remove: function( platformName ) {
-        //check to make sure we are in the plugin first
+        // Check to make sure we are in the plugin first
         if( !fs.existsSync( 'plugin.xml' ) ) {
             return Q.reject( new Error( "can't find a plugin.xml.  Are you in the plugin?" ) );
         }
 
-        //Get the current plugin.xml file
+        // Get the current plugin.xml file
         var pluginxml = et.parse( fs.readFileSync('plugin.xml', 'utf-8') );
 
-        //Check if this platform exists
+        // Check if this platform exists
         if( !pluginxml.find("./platform/[@name='"+ platformName +"']") ) {
             return Q.reject( new Error( "platform: " + platformName + " hasn't been added"  ) );
         }
 
-        //Remove the Platform in question
+        // Remove the Platform in question
         pluginxml.getroot().remove( 0, pluginxml.find("./platform/[@name='"+ platformName +"']") );
 
-        //Rewrite the plugin.xml file back out
+        // Rewrite the plugin.xml file back out
         fs.writeFileSync( "plugin.xml", pluginxml.write( "plugin.xml", {indent: 4} ), 'utf-8' );
 
-        //Remove the src/"platform"
+        // Remove the src/"platform"
         shell.rm( '-rf', 'src/' + platformName );
 
         return Q();
@@ -107,7 +107,7 @@ function doPlatform( platformName, pluginName, pluginID, pluginVersion ) {
 }
 
 function doPlatformBase( templatesDir, platformName, pluginName, pluginID, pluginVersion ) {
-    //Create the default plugin file
+    // Create the default plugin file
     var baseFiles = [],
         i = 0;
 

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/platforms/ios.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platforms/ios.js b/cordova-lib/src/plugman/platforms/ios.js
index 6e2f3fd..49336fc 100644
--- a/cordova-lib/src/plugman/platforms/ios.js
+++ b/cordova-lib/src/plugman/platforms/ios.js
@@ -26,7 +26,7 @@ var path = require('path')
   , fs   = require('fs')
   , glob = require('glob')
   , xcode = require('xcode')
-  , plist = require('plist-with-patches')
+  , plist = require('plist')
   , shell = require('shelljs')
   , events = require('../../events')
   , cachedProjectFiles = {}
@@ -38,7 +38,7 @@ module.exports = {
     },
     package_name:function(project_dir) {
         var plist_file = glob.sync(path.join(project_dir, '**', '*-Info.plist'))[0];
-        return plist.parseFileSync(plist_file).CFBundleIdentifier;
+        return plist.parse(fs.readFileSync(plist_file, 'utf8')).CFBundleIdentifier;
     },
     'source-file':{
         install:function(source_el, plugin_dir, project_dir, plugin_id, project) {

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/platforms/ubuntu.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platforms/ubuntu.js b/cordova-lib/src/plugman/platforms/ubuntu.js
index c422d7c..bf2665b 100644
--- a/cordova-lib/src/plugman/platforms/ubuntu.js
+++ b/cordova-lib/src/plugman/platforms/ubuntu.js
@@ -32,8 +32,10 @@ function toCamelCase(str) {
     }).join('');
 }
 
-var fs = require('fs')
+var shell = require('shelljs')
+   , fs = require('fs')
    , path = require('path')
+   , common = require('./common')
    , events = require('../../events')
    , xml_helpers = require(path.join(__dirname, '..', '..', 'util', 'xml-helpers'));
 
@@ -49,26 +51,24 @@ module.exports = {
     },
     'source-file':{
         install:function(source_el, plugin_dir, project_dir, plugin_id) {
-            var shell = require('shelljs');
-            var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id);
-            shell.mkdir(dest);
-            shell.cp(path.join(plugin_dir, source_el.attrib.src), dest);
+            var dest = path.join('build', 'src', 'plugins', plugin_id, path.basename(source_el.attrib.src));
+            common.copyFile(plugin_dir, source_el.attrib.src, project_dir, dest);
 
-            shell.exec('touch ' + path.join(project_dir, 'CMakeLists.txt'));
+            var cmake = path.join(project_dir, 'build', 'CMakeLists.txt');
+            shell.exec('touch ' + cmake);
         },
         uninstall:function(source_el, project_dir, plugin_id) {
-            var shell = require('shelljs');
-
             var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id);
             shell.rm(path.join(dest, path.basename(source_el.attrib.src)));
+
+            var cmake = path.join(project_dir, 'build', 'CMakeLists.txt');
+            shell.exec('touch ' + cmake);
         }
     },
     'header-file':{
         install:function(source_el, plugin_dir, project_dir, plugin_id) {
-            var shell = require('shelljs');
-            var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id);
-            shell.mkdir(dest);
-            shell.cp(path.join(plugin_dir, source_el.attrib.src), dest);
+            var dest = path.join('build', 'src', 'plugins', plugin_id, path.basename(source_el.attrib.src));
+            common.copyFile(plugin_dir, source_el.attrib.src, project_dir, dest);
 
             var plugins = path.join(project_dir, 'build', 'src', 'coreplugins.cpp');
             var src = String(fs.readFileSync(plugins));
@@ -81,7 +81,6 @@ module.exports = {
             fs.writeFileSync(plugins, src);
         },
         uninstall:function(source_el, project_dir, plugin_id) {
-            var shell = require('shelljs');
             var dest = path.join(project_dir, 'build', 'src', 'plugins', plugin_id);
             shell.rm(path.join(dest, path.basename(source_el.attrib.src)));
 
@@ -98,15 +97,15 @@ module.exports = {
     },
     'resource-file':{
         install:function(source_el, plugin_dir, project_dir, plugin_id) {
-            var shell = require('shelljs');
-            var dest = path.join(project_dir, 'qml');
-            shell.mkdir(dest);
-            shell.cp(path.join(plugin_dir, source_el.attrib.src), dest);
+            var dest = path.join('qml', path.basename(source_el.attrib.src));
+            if (source_el.attrib['target-dir'])
+                dest = path.join(source_el.attrib['target-dir'], path.basename(source_el.attrib.src));
+            common.copyFile(plugin_dir, source_el.attrib.src, project_dir, dest);
         },
         uninstall:function(source_el, project_dir, plugin_id) {
-            var shell = require('shelljs');
-
             var dest = path.join(project_dir, 'qml');
+            if (source_el.attrib['target-dir'])
+                dest = path.join(project_dir, source_el.attrib['target-dir']);
             shell.rm(path.join(dest, path.basename(source_el.attrib.src)));
         }
     },

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/platforms/windows.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/platforms/windows.js b/cordova-lib/src/plugman/platforms/windows.js
index 803a3c8..347e6a3 100644
--- a/cordova-lib/src/plugman/platforms/windows.js
+++ b/cordova-lib/src/plugman/platforms/windows.js
@@ -39,8 +39,8 @@ module.exports = {
     package_name:function(project_dir) {
         // CB-6976 Windows Universal Apps. To make platform backward compatible
         // with old template we look for package.appxmanifest file as well.
-        var manifestPath = fs.existsSync(path.join(project_dir, 'package.store.appxmanifest')) ?
-            path.join(project_dir, 'package.store.appxmanifest') :
+        var manifestPath = fs.existsSync(path.join(project_dir, 'package.windows.appxmanifest')) ?
+            path.join(project_dir, 'package.windows.appxmanifest') :
             path.join(project_dir, 'package.appxmanifest');
 
         var manifest = xml_helpers.parseElementtreeSync(manifestPath);
@@ -61,15 +61,15 @@ module.exports = {
     'source-file': {
         install:function(source_el, plugin_dir, project_dir, plugin_id, project_file) {
             var targetDir = source_el.attrib['target-dir'] || '';
-            var dest = path.join('www', 'plugins', plugin_id, targetDir, path.basename(source_el.attrib['src']));
+            var dest = path.join('plugins', plugin_id, targetDir, path.basename(source_el.attrib['src']));
 
             common.copyNewFile(plugin_dir, source_el.attrib['src'], project_dir, dest);
             // add reference to this file to jsproj.
             project_file.addSourceFile(dest);
         },
         uninstall:function(source_el, project_dir, plugin_id, project_file) {
-            var dest = path.join('www', 'plugins', plugin_id,
-                                 source_el.attrib['target-dir'] ? source_el.attrib['target-dir'] : '',
+            var dest = path.join('plugins', plugin_id,
+                                 source_el.attrib['target-dir'] || '',
                                  path.basename(source_el.attrib['src']));
             common.removeFile(project_dir, dest);
             // remove reference to this file from csproj.

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/prepare.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/prepare.js b/cordova-lib/src/plugman/prepare.js
index 961141e..284d164 100644
--- a/cordova-lib/src/plugman/prepare.js
+++ b/cordova-lib/src/plugman/prepare.js
@@ -26,8 +26,6 @@ var platform_modules = require('./platforms'),
     path            = require('path'),
     config_changes  = require('./util/config-changes'),
     xml_helpers     = require('../util/xml-helpers'),
-    wp8             = require('./platforms/wp8'),
-    windows        = require('./platforms/windows'),
     common          = require('./platforms/common'),
     fs              = require('fs'),
     shell           = require('shelljs'),
@@ -73,16 +71,6 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_
     events.emit('verbose', 'Processing configuration changes for plugins.');
     config_changes.process(plugins_dir, project_dir, platform);
 
-    // for windows phone and windows8 platforms we need to add all www resources to the .csproj(.jsproj) file
-    // first we need to remove them all to prevent duplicates
-    var projFile;
-    if (platform == 'wp8' || platform == 'windows8' || platform == 'windows') {
-        projFile = (platform == 'wp8') ? wp8.parseProjectFile(project_dir) :
-            windows.parseProjectFile(project_dir);
-        // remove reference to cordova_plugins.js and all files inside plugins folder
-        projFile.removeSourceFile(/^(\$\(MSBuildThisFileDirectory\))?www\\(cordova_plugins.js|plugins\\)/i);
-    }
-
     platform_json = config_changes.get_platform_json(plugins_dir, platform);
     // This array holds all the metadata for each module and ends up in cordova_plugins.json
     var plugins = Object.keys(platform_json.installed_plugins).concat(Object.keys(platform_json.dependent_plugins));
@@ -150,11 +138,11 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_
 
             var fsPath = path.join.apply(path, pathParts);
             var scriptContent = fs.readFileSync(path.join(pluginDir, fsPath), 'utf-8').replace(/^\ufeff/, ''); // Window BOM
+            if (fsPath.match(/.*\.json$/)) {
+                scriptContent = 'module.exports = ' + scriptContent;
+            }
             scriptContent = 'cordova.define("' + moduleName + '", function(require, exports, module) { ' + scriptContent + '\n});\n';
             fs.writeFileSync(path.join(platformPluginsDir, plugin_id, fsPath), scriptContent, 'utf-8');
-            if(platform == 'wp8' || platform == 'windows8') {
-                projFile.addSourceFile(path.join('www', 'plugins', plugin_id, fsPath));
-            }
 
             // Prepare the object for cordova_plugins.json.
             var obj = {
@@ -195,9 +183,4 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir, www_
 
     events.emit('verbose', 'Writing out cordova_plugins.js...');
     fs.writeFileSync(path.join(wwwDir, 'cordova_plugins.js'), final_contents, 'utf-8');
-
-    if(platform == 'wp8' || platform == 'windows8' || platform == 'windows') {
-        projFile.addSourceFile(path.join('www', 'cordova_plugins.js'));
-        projFile.write();
-    }
 };

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/registry/manifest.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/registry/manifest.js b/cordova-lib/src/plugman/registry/manifest.js
index 5306b0e..4496f34 100644
--- a/cordova-lib/src/plugman/registry/manifest.js
+++ b/cordova-lib/src/plugman/registry/manifest.js
@@ -88,7 +88,7 @@ function generatePackageJsonFromPluginXml(plugin_path) {
         if(keywords)     package_json.keywords     = keywords.split(',');
         if(platforms)    package_json.platforms    = platforms;
 
-        // adding engines
+        // Adding engines
         if(engines) {
             package_json.engines = [];
             for(var i = 0, j = engines.length ; i < j ; i++) {
@@ -96,10 +96,10 @@ function generatePackageJsonFromPluginXml(plugin_path) {
             }
         }
 
-        //set docs_path to doc/index.md exists
+        // Set docs_path to doc/index.md exists
         var docs_path = path.resolve(plugin_path, 'doc/index.md');
         if(!(fs.existsSync(docs_path))){
-            //set docs_path to doc/en/index.md
+            // Set docs_path to doc/en/index.md
             docs_path = path.resolve(plugin_path, 'doc/en/index.md');
         }
         if(fs.existsSync(docs_path)){
@@ -107,9 +107,8 @@ function generatePackageJsonFromPluginXml(plugin_path) {
             package_json.englishdoc = englishdoc;
         }
 
-        // write package.json
+        // Write package.json
         var package_json_path = path.resolve(plugin_path, 'package.json');
-        //console.log('about to write package.json');
         fs.writeFileSync(package_json_path, JSON.stringify(package_json, null, 4), 'utf8');
         return package_json;
     });

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/util/action-stack.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/action-stack.js b/cordova-lib/src/plugman/util/action-stack.js
index 376b397..d2508de 100644
--- a/cordova-lib/src/plugman/util/action-stack.js
+++ b/cordova-lib/src/plugman/util/action-stack.js
@@ -25,6 +25,8 @@
 var platforms = require("../platforms"),
     events = require('../../events'),
     Q = require('q');
+var superspawn = require('../../cordova/superspawn');
+var path = require('path');
 
 function ActionStack() {
     this.stack = [];
@@ -96,12 +98,13 @@ ActionStack.prototype = {
         }
         events.emit('verbose', 'Action stack processing complete.');
 
-        if (project_files) {
-            events.emit('verbose', 'Writing out ' + platform + ' project files...');
-            project_files.write();
-        }
-
-        return Q();
+        return superspawn.maybeSpawn(path.join(project_dir, 'cordova', 'version'))
+        .then(function(platformVersion) {
+            if (project_files) {
+                events.emit('verbose', 'Writing out ' + platform + ' project files...');
+                project_files.write(platformVersion);
+            }
+        });
     }
 };
 

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/util/android-project.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/android-project.js b/cordova-lib/src/plugman/util/android-project.js
index d13bfe9..bedec6b 100644
--- a/cordova-lib/src/plugman/util/android-project.js
+++ b/cordova-lib/src/plugman/util/android-project.js
@@ -29,6 +29,7 @@ var fs = require('fs'),
     path = require('path'),
     properties_parser = require('properties-parser'),
     shell = require('shelljs');
+var semver = require('semver');
 
 
 function addLibraryReference(projectProperties, libraryPath) {
@@ -85,16 +86,22 @@ AndroidProject.prototype = {
         delete this._subProjectDirs[subDir];
         this._dirty = true;
     },
-    write: function () {
+    write: function(platformVersion) {
         if (!this._dirty) return;
 
         for (var filename in this._propertiesEditors) {
             fs.writeFileSync(filename, this._propertiesEditors[filename].toString());
         }
 
-        for (var sub_dir in this._subProjectDirs)
-        {
-            shell.exec('android update lib-project --path "' + sub_dir + '"');
+        // Starting with 3.6.0, the build scripts set ANDROID_HOME, so there is
+        // no reason to keep run this command. Plus - we really want to avoid
+        // relying on the presense of native SDKs within plugman.
+        var needsUpdateProject = !platformVersion || semver.lt(platformVersion, '3.6.0');
+        if (needsUpdateProject) {
+            for (var sub_dir in this._subProjectDirs)
+            {
+                shell.exec('android update lib-project --path "' + sub_dir + '"');
+            }
         }
         this._dirty = false;
     },

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/util/config-changes.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/config-changes.js b/cordova-lib/src/plugman/util/config-changes.js
index f93a9b5..8a580cc 100644
--- a/cordova-lib/src/plugman/util/config-changes.js
+++ b/cordova-lib/src/plugman/util/config-changes.js
@@ -38,7 +38,7 @@
 var fs   = require('fs'),
     path = require('path'),
     glob = require('glob'),
-    plist = require('plist-with-patches'),
+    plist = require('plist'),
     bplist = require('bplist-parser'),
     et   = require('elementtree'),
     semver = require('semver'),
@@ -201,7 +201,7 @@ function remove_plugin_changes(plugin_name, plugin_id, is_top_level) {
         if (self.platform == 'windows' && file == 'package.appxmanifest' &&
             !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) {
             // New windows template separate manifest files for Windows8, Windows8.1 and WP8.1
-            var substs = ['package.phone.appxmanifest', 'package.store.appxmanifest', 'package.store80.appxmanifest'];
+            var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows80.appxmanifest'];
             for (var subst in substs) {
                 events.emit('verbose', 'Applying munge to ' + substs[subst]);
                 self.apply_file_munge(substs[subst], munge.files[file], true);
@@ -260,7 +260,7 @@ function add_plugin_changes(plugin_id, plugin_vars, is_top_level, should_increme
         // CB-6976 Windows Universal Apps. Compatibility fix for existing plugins.
         if (self.platform == 'windows' && file == 'package.appxmanifest' &&
             !fs.existsSync(path.join(self.project_dir, 'package.appxmanifest'))) {
-            var substs = ['package.phone.appxmanifest', 'package.store.appxmanifest', 'package.store80.appxmanifest'];
+            var substs = ['package.phone.appxmanifest', 'package.windows.appxmanifest', 'package.windows80.appxmanifest'];
             for (var subst in substs) {
                 events.emit('verbose', 'Applying munge to ' + substs[subst]);
                 self.apply_file_munge(substs[subst], munge.files[file]);
@@ -421,8 +421,8 @@ ConfigKeeper.prototype.get = ConfigKeeper_get;
 function ConfigKeeper_get(project_dir, platform, file) {
     var self = this;
 
-    //This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml
-    //https://issues.apache.org/jira/browse/CB-6414
+    // This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml
+    // https://issues.apache.org/jira/browse/CB-6414
     if(file == 'config.xml' && platform == 'android'){
         file = 'res/xml/config.xml';
     }
@@ -554,8 +554,9 @@ function ConfigFile_load() {
         //       We always write out text plist, not binary.
         //       Do we still need to support binary plist?
         //       If yes, use plist.parseStringSync() and read the file once.
-        self.plist_module = (isBinaryPlist(filepath) ? bplist : plist);
-        self.data = self.plist_module.parseFileSync(filepath);
+        self.data = isBinaryPlist(filepath) ?
+                bplist.parseBuffer(fs.readFileSync(filepath)) :
+                plist.parse(fs.readFileSync(filepath, 'utf8'));
     }
 }
 
@@ -796,7 +797,7 @@ function process_munge(obj, createParents, func, keys /* or key1, key2 .... */ )
 }
 
 // All values from munge are added to base as
-// base[file][selector][child] += base[file][selector][child]
+// base[file][selector][child] += munge[file][selector][child]
 // Returns a munge object containing values that exist in munge
 // but not in base.
 function increment_munge(base, munge) {
@@ -819,7 +820,7 @@ function increment_munge(base, munge) {
 }
 
 // Update the base munge object as
-// base[file][selector][child] -= base[file][selector][child]
+// base[file][selector][child] -= munge[file][selector][child]
 // nodes that reached zero value are removed from base and added to the returned munge
 // object.
 function decrement_munge(base, munge) {

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/plugman/util/plist-helpers.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/plugman/util/plist-helpers.js b/cordova-lib/src/plugman/util/plist-helpers.js
index b8d93f2..605a6c2 100644
--- a/cordova-lib/src/plugman/util/plist-helpers.js
+++ b/cordova-lib/src/plugman/util/plist-helpers.js
@@ -23,12 +23,12 @@
 
 // contains PLIST utility functions
 
-var plist = require('plist-with-patches');
+var plist = require('plist');
 
 // adds node to doc at selector
 module.exports.graftPLIST = graftPLIST;
 function graftPLIST(doc, xml, selector) {
-    var obj = plist.parseStringSync('<plist>'+xml+'</plist>');
+    var obj = plist.parse('<plist>'+xml+'</plist>');
 
     var node = doc[selector];
     if (node && Array.isArray(node) && Array.isArray(obj))
@@ -42,7 +42,7 @@ function graftPLIST(doc, xml, selector) {
 // removes node from doc at selector
 module.exports.prunePLIST = prunePLIST;
 function prunePLIST(doc, xml, selector) {
-    var obj = plist.parseStringSync('<plist>'+xml+'</plist>');
+    var obj = plist.parse('<plist>'+xml+'</plist>');
 
     pruneOBJECT(doc, selector, obj);
 

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/util/windows/jsproj.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/util/windows/jsproj.js b/cordova-lib/src/util/windows/jsproj.js
index d847603..ef1cb38 100644
--- a/cordova-lib/src/util/windows/jsproj.js
+++ b/cordova-lib/src/util/windows/jsproj.js
@@ -82,8 +82,6 @@ jsproj.prototype = {
 
         events.emit('verbose','addReference::' + relPath);
 
-        relPath = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + relPath : relPath;
-
         var item = new et.Element('ItemGroup');
         var extName = path.extname(relPath);
 
@@ -110,8 +108,6 @@ jsproj.prototype = {
     removeReference:function(relPath) {
         events.emit('verbose','removeReference::' + relPath);
 
-        relPath = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + relPath : relPath;
-
         var extName = path.extname(relPath);
         var includeText = path.basename(relPath,extName);
         // <ItemGroup>
@@ -134,7 +130,6 @@ jsproj.prototype = {
 
         relative_path.forEach(function(filePath) {
             filePath = filePath.split('/').join('\\');
-            filePath = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + filePath : filePath;
 
             var content = new et.Element('Content');
             content.attrib.Include = filePath;
@@ -148,7 +143,6 @@ jsproj.prototype = {
         if (!isRegexp) {
             // path.normalize(relative_path);// ??
             relative_path = relative_path.split('/').join('\\');
-            relative_path = this.isUniversalWindowsApp ? '$(MSBuildThisFileDirectory)' + relative_path : relative_path;
         }
 
         var root = this.xml.getroot();


[6/6] git commit: set version to 0.21.14-dev

Posted by st...@apache.org.
set version to 0.21.14-dev


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

Branch: refs/heads/master
Commit: 2aace451a1c45dc654eebb94145dbf0e717061ba
Parents: 6e04c26
Author: Steven Gill <st...@gmail.com>
Authored: Mon Sep 22 15:05:01 2014 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Sep 22 15:05:01 2014 -0700

----------------------------------------------------------------------
 cordova-lib/package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/2aace451/cordova-lib/package.json
----------------------------------------------------------------------
diff --git a/cordova-lib/package.json b/cordova-lib/package.json
index 990235e..72d376f 100644
--- a/cordova-lib/package.json
+++ b/cordova-lib/package.json
@@ -2,7 +2,7 @@
   "author": "Apache Software Foundation",
   "name": "cordova-lib",
   "description": "Apache Cordova tools core lib and API",
-  "version": "0.21.13",
+  "version": "0.21.14-dev",
   "repository": {
     "type": "git",
     "url": "git://git-wip-us.apache.org/repos/asf/cordova-lib.git"


[2/6] git commit: Revert "Revert "Merge branch 'browserPlatform' of https://github.com/surajpindoria/cordova-lib""

Posted by st...@apache.org.
Revert "Revert "Merge branch 'browserPlatform' of https://github.com/surajpindoria/cordova-lib""

This reverts commit a01779552ad240dc2e2a550376ce6e2978eeba8b.


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

Branch: refs/heads/master
Commit: 62bdd246afb695fa7d7fcc43761c93a0207d3d5a
Parents: 2c3817e
Author: Steven Gill <st...@gmail.com>
Authored: Mon Sep 22 14:16:10 2014 -0700
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Sep 22 14:16:10 2014 -0700

----------------------------------------------------------------------
 .travis.yml                                     |   4 +-
 README.md                                       |   3 +-
 cordova-lib/RELEASENOTES.md                     | 146 ++++++++++-
 cordova-lib/package.json                        |  10 +-
 cordova-lib/spec-cordova/ConfigParser.spec.js   | 163 ++++++++++++
 .../fixtures/plugins/malformed/plugin.xml       |  10 +
 .../spec-cordova/metadata/ios_parser.spec.js    |   4 +-
 .../metadata/windows8_parser.spec.js            |   5 +-
 .../spec-cordova/metadata/wp8_parser.spec.js    |   7 +-
 cordova-lib/spec-cordova/test-config.xml        |  27 +-
 .../spec-plugman/install-browserify.spec.js     |   6 +-
 cordova-lib/spec-plugman/install.spec.js        |   5 +-
 cordova-lib/spec-plugman/platforms/ios.spec.js  |   2 +-
 .../spec-plugman/platforms/windows8.spec.js     |   6 +-
 .../projects/android_install/cordova/version    |  24 +-
 .../projects/android_one/cordova/version.bat    |   2 +
 .../projects/android_uninstall/cordova/version  |  23 +-
 .../spec-plugman/util/config-changes.spec.js    |   2 +-
 cordova-lib/src/PluginInfo.js                   |  18 +-
 cordova-lib/src/configparser/ConfigParser.js    | 102 +++++++-
 .../src/configparser/ConfigParser.spec.js       |  99 --------
 cordova-lib/src/cordova/create.js               |  14 +-
 .../cordova/metadata/amazon_fireos_parser.js    | 253 +++++++++++--------
 .../src/cordova/metadata/android_parser.js      |  15 ++
 .../src/cordova/metadata/firefoxos_parser.js    |   6 +-
 cordova-lib/src/cordova/metadata/ios_parser.js  |  63 ++++-
 .../src/cordova/metadata/ubuntu_parser.js       |  20 +-
 .../src/cordova/metadata/windows_parser.js      |  40 +--
 cordova-lib/src/cordova/metadata/wp8_parser.js  |  41 +--
 cordova-lib/src/cordova/platform.js             |  46 ++--
 cordova-lib/src/cordova/platforms.js            |  20 +-
 cordova-lib/src/cordova/prepare.js              |   2 +-
 cordova-lib/src/cordova/restore.js              |  60 ++---
 cordova-lib/src/cordova/superspawn.js           |   7 +
 cordova-lib/src/plugman/create.js               |  16 +-
 cordova-lib/src/plugman/install.js              |   4 +-
 cordova-lib/src/plugman/platform.js             |  24 +-
 cordova-lib/src/plugman/platforms/ios.js        |   4 +-
 cordova-lib/src/plugman/platforms/ubuntu.js     |  37 ++-
 cordova-lib/src/plugman/platforms/windows.js    |  10 +-
 cordova-lib/src/plugman/prepare.js              |  23 +-
 cordova-lib/src/plugman/registry/manifest.js    |   9 +-
 cordova-lib/src/plugman/util/action-stack.js    |  15 +-
 cordova-lib/src/plugman/util/android-project.js |  15 +-
 cordova-lib/src/plugman/util/config-changes.js  |  19 +-
 cordova-lib/src/plugman/util/plist-helpers.js   |   6 +-
 cordova-lib/src/util/windows/jsproj.js          |   6 -
 47 files changed, 941 insertions(+), 502 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
index f96ddca..3cf588b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,6 @@
 language: node_js
+git:
+  depth: 10
 node_js:
   - "0.10"
-before_install: cd cordova-lib
\ No newline at end of file
+before_install: cd cordova-lib

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index ec4e3df..c28cae4 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,8 @@
 
 [![Build status](https://ci.appveyor.com/api/projects/status/q9s459ssqvs1t7j6/branch/master)](https://ci.appveyor.com/project/Humbedooh/cordova-lib)
 [![Build Status](https://travis-ci.org/apache/cordova-lib.svg?branch=master)](https://travis-ci.org/apache/cordova-lib)
-[![npm version](http://b.adge.me/npm/v/cordova-lib.svg)](https://www.npmjs.org/package/cordova-lib)
+[![npm version](http://b.adge.me/npm/v/cordova-lib.svg)](https://www.npmjs.org/package/cordova-lib)  
+[BuildBot waterfall](http://ci.cordova.io/) with [cordova-mobile-spec](https://github.com/apache/cordova-mobile-spec) running on real Android and iOS devices.
 
 # cordova-lib
 Contains npm modules used primarily by [cordova](https://github.com/apache/cordova-cli/) and [plugman](https://github.com/apache/cordova-plugman/).

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/cordova-lib/RELEASENOTES.md b/cordova-lib/RELEASENOTES.md
index 7dc6914..7beae1c 100644
--- a/cordova-lib/RELEASENOTES.md
+++ b/cordova-lib/RELEASENOTES.md
@@ -20,6 +20,149 @@
 -->
 # Cordova-lib Release Notes
 
+### 0.21.10 (Sep 05, 2014)
+* CB-7457 - cordova plugin add --searchpath does not recurse through subfolders when a plugin.xml is malformed in one of them
+* CB-7457 - Add malformed plugin for tests
+* [Windows8] Fix failing test to match updated functionality
+* CB-7420 Windows. Plugin <resource-file>s are removed from platform during prepare
+* Windows helper. Removes unnecessary $(MSBuildThisFileDirectory)
+* updated Releasenotes.md
+* updated version to 0.21.10-dev
+* CB-7457 - cordova plugin add --searchpath does not recurse through subfolders when a plugin.xml is malformed in one of them
+* CB-7457 - Add malformed plugin for tests
+* [Windows8] Fix failing test to match updated functionality
+* updated Releasenotes.md
+* updated version to 0.21.10-dev
+* updated version, updated ffos to use 3.6.1, updated cordova-js dependency to be strcit
+* CB-7383 Incremented package version to -dev
+* updated platforms.js to use 3.6.0
+*  Updated version and RELEASENOTES.md for release 0.21.8
+* CB-5535: Remove "--arc" from ios platform creation args
+* Windows helper. Removes unnecessary $(MSBuildThisFileDirectory)
+* CB-7420 Windows. Plugin <resource-file>s are removed from platform during prepare
+* CB-7416 Fixes file path reference when adding new source file
+* CB-7416 handleInstall tests for null platformTag. removed uncalled 'hasPlatformSection' from PluginInfo.js
+* Remove use of path.join for manifest.launch_path
+* CB-7347 Improve cordova platform add /path/to handling
+* CB-7118 (fix jshint warnings)
+* CB-7114 Android: add support of min/max/target SDK to config.xml
+* CB-7118 Use updated version of node-xcode
+* CB-7118 iOS: add target-device and MinimumOSVersion support to config.xml
+* ubuntu: support incremental builds
+* ubuntu: support target-dir for resource-file
+* ubuntu: use common.copyFile
+* ubuntu: check icon existence
+* ffos: Make author url optional
+* CB-7142 Add <variable> to <feature> for "plugin restore" command
+* Set git clone depth to 10 for Travis to make it faster
+* windows: update as per changed manifest file names
+* Don't spy and expect it to call the other spy ...
+* Well that looks like an error
+* Fixing failing tests: update_proj should be update_project
+* Fix failing tests. update_jsproj and update_csproj are now just update_proj
+* Fix jshint errors in amazon_fireos_parser : mixed single/double quotes
+* CB-6699 Include files from www folder via single element (use ** glob pattern)
+* Taking care of dashes in amazon-fireos platform name.
+* Upleveled amazon-fireos changes.
+* Fix link/copy parent check for windows
+* Style fixes - comments
+* Fix error in comments for munge functions
+* Add link to BuildBot at ci.cordova.io in README
+* CB-7255 Fixed writing plist unescaped
+* Allow plugin modules to be .json files
+* Style fixes - white space only
+* Add JSCS config file
+* CB-7260 Get cordova-android 3.5.1 instead of 3.5.0
+* CB-7228: Fixed issue with "cordova prepare --browserify"
+* CB-7234 added better outputs for plugin registry workflows
+* CB-7100: Use npm based lazy-load by default
+* CB-7091: Remove check_requirements() funcs from platform parsers
+* CB-7091: Remove check_requirements() funcs from platform parsers
+* CB-7140 Check plugin versions in local search path
+* CB-7001: Create a --browserify option for run action
+* CB-7228: Cordova prepare --browserify runs on all installed plugins
+* CB-7190: Add browserify support in cordova-lib/cordova-cli
+* Remove references to "firefoxos"
+* Browser platform is now being created from cli
+* Created new files for browser
+
+### 0.21.8 (Aug 29, 2014)
+* CB-5535: Remove "--arc" from ios platform creation args
+* CB-7416 Fixes file path reference when adding new source file
+* CB-7416 handleInstall tests for null platformTag. removed uncalled 'hasPlatformSection' from PluginInfo.js
+* Remove use of path.join for manifest.launch_path
+* CB-7347 Improve cordova platform add /path/to handling
+* CB-7118 (fix jshint warnings)
+* CB-7114 Android: add support of min/max/target SDK to config.xml
+* CB-7118 Use updated version of node-xcode
+* CB-7118 iOS: add target-device and MinimumOSVersion support to config.xml
+* ubuntu: support incremental builds
+* ubuntu: support target-dir for resource-file
+* ubuntu: use common.copyFile
+* ubuntu: check icon existence
+* ffos: Make author url optional
+* CB-7142 Add <variable> to <feature> for "plugin restore" command
+* Set git clone depth to 10 for Travis to make it faster
+* windows: update as per changed manifest file names
+* Don't spy and expect it to call the other spy ...
+* Well that looks like an error
+* Fixing failing tests: update_proj should be update_project
+* Fix failing tests. update_jsproj and update_csproj are now just update_proj
+* Fix jshint errors in amazon_fireos_parser : mixed single/double quotes
+* CB-6699 Include files from www folder via single element (use ** glob pattern)
+* Allow plugin modules to be .json files
+* Taking care of dashes in amazon-fireos platform name.
+* Upleveled amazon-fireos changes.
+* Fix link/copy parent check for windows
+* Style fixes - comments
+* Fix error in comments for munge functions
+* Add link to BuildBot at ci.cordova.io in README
+* CB-7255 Fixed writing plist unescaped
+* Style fixes - white space only
+* Add JSCS config file
+* CB-7228: Fixed issue with "cordova prepare --browserify"
+* CB-7001: Create a --browserify option for run action
+* CB-7228: Cordova prepare --browserify runs on all installed plugins
+* CB-7190: Add browserify support in cordova-lib/cordova-cli
+* CB-7260 Get cordova-android 3.5.1 instead of 3.5.0
+* CB-7001: Create a --browserify option for run action
+* CB-7228: Cordova prepare --browserify runs on all installed plugins
+* CB-7190: Add browserify support in cordova-lib/cordova-cli
+* CB-7234 added better outputs for plugin registry workflows
+* CB-7100: Use npm based lazy-load by default
+* CB-7091: Remove check_requirements() funcs from platform parsers
+* CB-7091: Remove check_requirements() funcs from platform parsers
+* CB-7140 Check plugin versions in local search path
+* small refactor for missing code block after conditional statement
+* CB-7203 isRelativePath needs to pass path through
+* CB-7199 control git/npm using platform.js
+* CB-7199 control git/npm using platform.js
+* Fix style errors - make jshint happy
+* CB-6756 Adds save and restore command for platforms.
+* Add VERSION files to fix failing tests (forgot to git add in b7781cb)
+* CB-7132 Fix regression regarding default resources
+* CB-7187 Make CoreLocation a required library only for cordova-ios < 3.6.0
+* Add AppVeyor badge to README
+* Add Travis and npm badges to README.md
+* fix(tests): cordova/lazy_load spec on Windows
+* Fix plugman/install spec
+* build configuration for AppVeyor
+* build configurations for Travis
+* CB-7124 Wrap the cordova platform string in Platform object
+* CB-7140: Switch to using PluginInfo in plugman/fetch.js
+* Minor style fixes in fetch.js
+* CB-7078: Disable serve.spec.js
+* CB-6512: platform add <path> was using wrong www/cordova.js
+* CB-7083 Missing SDKReference support on Windows Phone
+* CB-6874 Consolidate <Content> tag additions into 1 ItemGroup
+* CB-7100: Use npm based lazy-load by default
+* CB-7091: Remove check_requirements() funcs from platform parsers
+* CB-7091: Don't call check_requirements during platform add
+* Fix typo in comment.
+* CB-7087 Retire blackberry10/ directory
+* CB-6776: Fix uri/url renaming bug
+* Remove npm-shrinkwrap.json
+
 
 ### 0.21.4 (Jun 23, 2014)
 * CB-3571, CB-2606: support for splashscreens
@@ -78,4 +221,5 @@
 
 
 ### 0.21.1
-Initial release v0.21.1 (picks up from the same version number as plugman was).
\ No newline at end of file
+Initial release v0.21.1 (picks up from the same version number as plugman was).
+

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/package.json
----------------------------------------------------------------------
diff --git a/cordova-lib/package.json b/cordova-lib/package.json
index 1518065..0c7e380 100644
--- a/cordova-lib/package.json
+++ b/cordova-lib/package.json
@@ -2,7 +2,7 @@
   "author": "Apache Software Foundation",
   "name": "cordova-lib",
   "description": "Apache Cordova tools core lib and API",
-  "version": "0.21.8-dev",
+  "version": "0.21.11-dev",
   "repository": {
     "type": "git",
     "url": "git://git-wip-us.apache.org/repos/asf/cordova-lib.git"
@@ -25,17 +25,17 @@
     "npm": "1.3.4",
     "npmconf": "0.1.x",
     "osenv": "0.0.x",
-    "plist-with-patches": "0.5.x",
+    "plist": "1.0.x",
     "properties-parser": "~0.2.3",
     "q": "~0.9",
     "rc": "0.3.0",
     "request": "2.22.0",
     "semver": "2.0.x",
-    "shelljs": "0.1.x",
+    "shelljs": "0.3.x",
     "tar": "0.1.x",
     "underscore": "1.4.4",
-    "xcode": "0.6.6",
-    "cordova-js": "3.x.x",
+    "xcode": "0.6.7",
+    "cordova-js": "3.6.3",
     "unorm": ">=1.3"
   },
   "devDependencies": {

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-cordova/ConfigParser.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-cordova/ConfigParser.spec.js b/cordova-lib/spec-cordova/ConfigParser.spec.js
new file mode 100644
index 0000000..7028034
--- /dev/null
+++ b/cordova-lib/spec-cordova/ConfigParser.spec.js
@@ -0,0 +1,163 @@
+/**
+    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.
+*/
+var path = require('path'),
+    fs = require('fs'),
+    ConfigParser = require('../src/configparser/ConfigParser'),
+    xml = path.join(__dirname, 'test-config.xml'),
+    xml_contents = fs.readFileSync(xml, 'utf-8');
+
+describe('config.xml parser', function () {
+    var readFile;
+    beforeEach(function() {
+        readFile = spyOn(fs, 'readFileSync').andReturn(xml_contents);
+    });
+
+    it('should create an instance based on an xml file', function() {
+        var cfg;
+        expect(function () {
+            cfg = new ConfigParser(xml);
+        }).not.toThrow();
+        expect(cfg).toBeDefined();
+        expect(cfg.doc).toBeDefined();
+    });
+
+    describe('methods', function() {
+        var cfg;
+        beforeEach(function() {
+            cfg = new ConfigParser(xml);
+        });
+
+        describe('package name / id', function() {
+            it('should get the (default) packagename', function() {
+                expect(cfg.packageName()).toEqual('io.cordova.hellocordova');
+            });
+            it('should allow setting the packagename', function() {
+                cfg.setPackageName('this.is.bat.country');
+                expect(cfg.packageName()).toEqual('this.is.bat.country');
+            });
+        });
+
+        describe('version', function() {
+            it('should get the version', function() {
+                expect(cfg.version()).toEqual('0.0.1');
+            });
+            it('should allow setting the version', function() {
+                cfg.setVersion('2.0.1');
+                expect(cfg.version()).toEqual('2.0.1');
+            });
+        });
+
+        describe('app name', function() {
+            it('should get the (default) app name', function() {
+                expect(cfg.name()).toEqual('Hello Cordova');
+            });
+            it('should allow setting the app name', function() {
+                cfg.setName('this.is.bat.country');
+                expect(cfg.name()).toEqual('this.is.bat.country');
+            });
+        });
+        describe('preference', function() {
+            it('should get value of existing preference', function() {
+                expect(cfg.getPreference('fullscreen')).toEqual('true');
+            });
+            it('should get undefined as non existing preference', function() {
+                expect(cfg.getPreference('zimzooo!')).toEqual(undefined);
+            });
+        });
+        describe('platform specific preference', function() {
+            it('should get value of existing platform specific preference', function() {
+                expect(cfg.getPreference('android-minSdkVersion', 'android')).toEqual('10');
+            });
+        });
+        describe('feature',function(){
+            it('should read feature id list', function() {
+               var expectedList = [
+                   "org.apache.cordova.featurewithvars",
+                   "org.apache.cordova.featurewithurl",
+                   "org.apache.cordova.featurewithversion",
+                   "org.apache.cordova.featurewithurlandversion",
+                   "org.apache.cordova.justafeature"
+               ];
+               var list = cfg.getFeatureIdList();
+               expect(list.length).toEqual(expectedList.length);
+               expectedList.forEach(function(feature){
+                   expect(list).toContain(feature);
+               });
+            });
+            it('should read feature given id', function(){
+                var feature = cfg.getFeature("org.apache.cordova.justafeature");
+                expect(feature).toBeDefined();
+                expect(feature.name).toEqual("A simple feature");
+                expect(feature.id).toEqual("org.apache.cordova.justafeature");
+                expect(feature.params).toBeDefined();
+                expect(feature.params.id).toBeDefined();
+                expect(feature.params.id).toEqual("org.apache.cordova.justafeature");
+            });
+            it('should not read feature given undefined id', function(){
+                var feature = cfg.getFeature("org.apache.cordova.undefinedfeature");
+                expect(feature).not.toBeDefined();
+            });
+            it('should read feature with url and set \'url\' param', function(){
+                var feature = cfg.getFeature("org.apache.cordova.featurewithurl");
+                expect(feature.url).toEqual("http://cordova.apache.org/featurewithurl");
+                expect(feature.params).toBeDefined();
+                expect(feature.params.url).toBeDefined();
+                expect(feature.params.url).toEqual("http://cordova.apache.org/featurewithurl");
+            });
+            it('should read feature with version and set \'version\' param', function(){
+                var feature = cfg.getFeature("org.apache.cordova.featurewithversion");
+                expect(feature.version).toEqual("1.1.1");
+                expect(feature.params).toBeDefined();
+                expect(feature.params.version).toBeDefined();
+                expect(feature.params.version).toEqual("1.1.1");
+            });
+            it('should read feature variables', function () {
+                var feature = cfg.getFeature("org.apache.cordova.featurewithvars");
+                expect(feature.variables).toBeDefined();
+                expect(feature.variables.var).toBeDefined();
+                expect(feature.variables.var).toEqual("varvalue");
+            });
+            it('should allow adding a new feature', function(){
+                cfg.addFeature('myfeature');
+                var features = cfg.doc.findall('feature');
+                var featureNames = features.map(function(feature){
+                    return feature.attrib.name;
+                });
+                expect(featureNames).toContain('myfeature');
+            });
+            it('should allow adding features with params', function(){
+                cfg.addFeature('afeature', JSON.parse('[{"name":"paraname", "value":"paravalue"}]'));
+                var features = cfg.doc.findall('feature');
+                var feature  = (function(){
+                    var i = features.length;
+                    var f;
+                    while (--i >= 0) {
+                        f = features[i];
+                        if ('afeature' === f.attrib.name) return f;
+                    }
+                    return undefined;
+                })();
+                expect(feature).toBeDefined();
+                var params = feature.findall('param');
+                expect(params[0].attrib.name).toEqual('paraname');
+                expect(params[0].attrib.value).toEqual('paravalue');
+            });
+        });
+    });
+});

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-cordova/fixtures/plugins/malformed/plugin.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-cordova/fixtures/plugins/malformed/plugin.xml b/cordova-lib/spec-cordova/fixtures/plugins/malformed/plugin.xml
new file mode 100644
index 0000000..d7c1884
--- /dev/null
+++ b/cordova-lib/spec-cordova/fixtures/plugins/malformed/plugin.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+< <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
+           id="org.apache.cordova.fakeplugin1"
+      version="0.1.0-dev">
+    <name>malformed</name>
+    <description>Cordova malformed plugin for tests</description>
+    <license>Apache 2.0</license>
+    <keywords>cordova,cli,test</keywords>
+</plugin>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-cordova/metadata/ios_parser.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-cordova/metadata/ios_parser.spec.js b/cordova-lib/spec-cordova/metadata/ios_parser.spec.js
index 7cceb98..b17ce0d 100644
--- a/cordova-lib/spec-cordova/metadata/ios_parser.spec.js
+++ b/cordova-lib/spec-cordova/metadata/ios_parser.spec.js
@@ -20,7 +20,7 @@ var platforms = require('../../src/cordova/platforms'),
     util = require('../../src/cordova/util'),
     path = require('path'),
     shell = require('shelljs'),
-    plist = require('plist-with-patches'),
+    plist = require('plist'),
     xcode = require('xcode'),
     et = require('elementtree'),
     fs = require('fs'),
@@ -89,7 +89,7 @@ describe('ios project parser', function () {
             var update_name, xc_write;
             beforeEach(function() {
                 mv = spyOn(shell, 'mv');
-                plist_parse = spyOn(plist, 'parseFileSync').andReturn({
+                plist_parse = spyOn(plist, 'parse').andReturn({
                 });
                 plist_build = spyOn(plist, 'build').andReturn('');
                 update_name = jasmine.createSpy('update_name');

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js b/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js
index b4b804f..2d9c3f3 100644
--- a/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js
+++ b/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js
@@ -132,9 +132,9 @@ describe('windows8 project parser', function() {
             });
         });
         describe('update_www method', function() {
-            var update_jsproj;
+            var update_project;
             beforeEach(function() {
-                update_jsproj = spyOn(parser, 'update_jsproj');
+                update_project = spyOn(parser, 'update_project');
             });
             it('should rm project-level www and cp in platform agnostic www', function() {
                 parser.update_www(path.join('lib','dir'));
@@ -147,7 +147,6 @@ describe('windows8 project parser', function() {
             beforeEach(function() {
                 config = spyOn(parser, 'update_from_config');
                 www = spyOn(parser, 'update_www');
-                www = spyOn(parser, 'update_jsproj');
                 shellls = spyOn(shell, 'ls').andReturn([]);
                 svn = spyOn(util, 'deleteSvnFolders');
                 exists.andReturn(false);

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js b/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js
index bf05411..dd85d26 100644
--- a/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js
+++ b/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js
@@ -147,9 +147,9 @@ describe('wp8 project parser', function() {
             });
         });
         describe('update_www method', function() {
-            var update_csproj;
+            var update_project;
             beforeEach(function() {
-                update_csproj = spyOn(p, 'update_csproj');
+                update_project = spyOn(p, 'update_project');
             });
             it('should rm project-level www and cp in platform agnostic www', function() {
                 p.update_www();
@@ -158,12 +158,11 @@ describe('wp8 project parser', function() {
             });
         });
         describe('update_project method', function() {
-            var config, www, overrides, svn, csproj;
+            var config, www, overrides, svn;
             beforeEach(function() {
                 config = spyOn(p, 'update_from_config');
                 www = spyOn(p, 'update_www');
                 svn = spyOn(util, 'deleteSvnFolders');
-                csproj = spyOn(p, 'update_csproj');
                 exists.andReturn(false);
             });
             it('should call update_from_config', function(done) {

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-cordova/test-config.xml
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-cordova/test-config.xml b/cordova-lib/spec-cordova/test-config.xml
index 5e01e48..27838b7 100644
--- a/cordova-lib/spec-cordova/test-config.xml
+++ b/cordova-lib/spec-cordova/test-config.xml
@@ -22,5 +22,28 @@
     <icon id="logo" src="logo.png" width="255" height="255" />
     <platform name="android">
         <icon src="logo-android.png" width="255" height="255" density="mdpi" />
-    </platform>    
-</widget>
\ No newline at end of file
+        <preference name="android-minSdkVersion" value="10" />
+    </platform>
+
+    <!-- Features -->
+    <feature name="A feature with preference">
+        <param name="id" value="org.apache.cordova.featurewithvars"/>
+        <variable name="var" value="varvalue"/>
+    </feature>
+    <feature name="A feature with url">
+        <param name="id" value="org.apache.cordova.featurewithurl" />
+        <param name="url" value="http://cordova.apache.org/featurewithurl" />
+    </feature>
+    <feature name="A feature with version">
+        <param name="id" value="org.apache.cordova.featurewithversion" />
+        <param name="version" value="1.1.1" />
+    </feature>
+    <feature name="A feature with url and version">
+        <param name="id" value="org.apache.cordova.featurewithurlandversion" />
+        <param name="version" value="1.1.1" />
+        <param name="url" value="http://cordova.apache.org/featurewithurlandversion" />
+    </feature>
+    <feature name="A simple feature">
+        <param name="id" value="org.apache.cordova.justafeature" />
+    </feature>
+</widget>

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/install-browserify.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/install-browserify.spec.js b/cordova-lib/spec-plugman/install-browserify.spec.js
index 1731707..356b7a4 100644
--- a/cordova-lib/spec-plugman/install-browserify.spec.js
+++ b/cordova-lib/spec-plugman/install-browserify.spec.js
@@ -53,7 +53,8 @@ var install = require('../src/plugman/install'),
     },
     promise,
     results = {},
-    dummy_id = 'com.phonegap.plugins.dummyplugin';
+    dummy_id = 'com.phonegap.plugins.dummyplugin',
+    superspawn = require('../src/cordova/superspawn');
 
 
 // Pre-crete the temp dir, without it the test fails.
@@ -150,14 +151,15 @@ describe('start', function() {
 
 describe('install', function() {
     var chmod, exec, proc, add_to_queue, prepare, actions_push, c_a, mkdir, cp, rm, fetchSpy, emit;
+    var spawnSpy;
 
     beforeEach(function() {
         prepare = spyOn(plugman, 'prepare').andReturn( Q(true) );
         prepareBrowserify = spyOn(plugman, 'prepareBrowserify');
         exec = spyOn(child_process, 'exec').andCallFake(function(cmd, cb) {
-
             cb(false, '', '');
         });
+        spawnSpy = spyOn(superspawn, 'spawn').andReturn(Q('3.1.0'));
         spyOn(fs, 'mkdirSync').andReturn(true);
         spyOn(shell, 'mkdir').andReturn(true);
         spyOn(platforms, 'copyFile').andReturn(true);

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/install.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/install.spec.js b/cordova-lib/spec-plugman/install.spec.js
index 3fe8428..7b83d2a 100644
--- a/cordova-lib/spec-plugman/install.spec.js
+++ b/cordova-lib/spec-plugman/install.spec.js
@@ -52,7 +52,8 @@ var install = require('../src/plugman/install'),
     },
     promise,
     results = {},
-    dummy_id = 'com.phonegap.plugins.dummyplugin';
+    dummy_id = 'com.phonegap.plugins.dummyplugin',
+    superspawn = require('../src/cordova/superspawn');
 
 
 // Pre-crete the temp dir, without it the test fails.
@@ -147,6 +148,7 @@ describe('start', function() {
 
 describe('install', function() {
     var chmod, exec, proc, add_to_queue, prepare, actions_push, c_a, mkdir, cp, rm, fetchSpy, emit;
+    var spawnSpy;
 
     beforeEach(function() {
         prepare = spyOn(plugman, 'prepare').andReturn( Q(true) );
@@ -154,6 +156,7 @@ describe('install', function() {
         exec = spyOn(child_process, 'exec').andCallFake(function(cmd, cb) {
             cb(false, '', '');
         });
+        spawnSpy = spyOn(superspawn, 'spawn').andReturn(Q('3.1.0'));
         spyOn(fs, 'mkdirSync').andReturn(true);
         spyOn(shell, 'mkdir').andReturn(true);
         spyOn(platforms, 'copyFile').andReturn(true);

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/platforms/ios.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/platforms/ios.spec.js b/cordova-lib/spec-plugman/platforms/ios.spec.js
index cc8dcfd..d0acd9e 100644
--- a/cordova-lib/spec-plugman/platforms/ios.spec.js
+++ b/cordova-lib/spec-plugman/platforms/ios.spec.js
@@ -23,7 +23,7 @@ var ios = require('../../src/plugman/platforms/ios'),
     et = require('elementtree'),
     shell = require('shelljs'),
     os = require('osenv'),
-    plist = require('plist-with-patches'),
+    plist = require('plist'),
     bplist = require('bplist-parser'),
     temp = path.join(os.tmpdir(), 'plugman'),
     plugins_dir = path.join(temp, 'cordova', 'plugins'),

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/platforms/windows8.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/platforms/windows8.spec.js b/cordova-lib/spec-plugman/platforms/windows8.spec.js
index ee68bd8..fd550e9 100644
--- a/cordova-lib/spec-plugman/platforms/windows8.spec.js
+++ b/cordova-lib/spec-plugman/platforms/windows8.spec.js
@@ -108,7 +108,7 @@ describe('windows8 project handler', function() {
                 var source = copyArray(valid_source);
                 var s = spyOn(common, 'copyFile');
                 windows8['source-file'].install(source[0], dummyplugin, temp, dummy_id, proj_files);
-                expect(s).toHaveBeenCalledWith(dummyplugin, 'src/windows8/dummer.js', temp, path.join('www', 'plugins', 'com.phonegap.plugins.dummyplugin', 'dummer.js'));
+                expect(s).toHaveBeenCalledWith(dummyplugin, 'src/windows8/dummer.js', temp, path.join('plugins', 'com.phonegap.plugins.dummyplugin', 'dummer.js'));
             });
             it('should throw if source-file src cannot be found', function() {
                 var source = copyArray(invalid_source);
@@ -118,7 +118,7 @@ describe('windows8 project handler', function() {
             });
             it('should throw if source-file target already exists', function() {
                 var source = copyArray(valid_source);
-                var target = path.join(temp, 'www', 'plugins', dummy_id, 'dummer.js');
+                var target = path.join(temp, 'plugins', dummy_id, 'dummer.js');
                 shell.mkdir('-p', path.dirname(target));
                 fs.writeFileSync(target, 'some bs', 'utf-8');
                 expect(function() {
@@ -144,7 +144,7 @@ describe('windows8 project handler', function() {
                 .then(function() {
                     var source = copyArray(valid_source);
                     windows8['source-file'].uninstall(source[0], temp, dummy_id, proj_files);
-                    expect(s).toHaveBeenCalledWith(temp, path.join('www', 'plugins',  'com.phonegap.plugins.dummyplugin', 'dummer.js'));
+                    expect(s).toHaveBeenCalledWith(temp, path.join('plugins',  'com.phonegap.plugins.dummyplugin', 'dummer.js'));
                     done();
                 });
             });

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/projects/android_install/cordova/version
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/android_install/cordova/version b/cordova-lib/spec-plugman/projects/android_install/cordova/version
old mode 100644
new mode 100755
index 01f68fd..3c331da
--- a/cordova-lib/spec-plugman/projects/android_install/cordova/version
+++ b/cordova-lib/spec-plugman/projects/android_install/cordova/version
@@ -1 +1,23 @@
-echo 9.0.0
\ No newline at end of file
+#!/usr/bin/env node
+
+/*
+       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.
+*/
+
+console.log('9.0.0');
+

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/projects/android_one/cordova/version.bat
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/android_one/cordova/version.bat b/cordova-lib/spec-plugman/projects/android_one/cordova/version.bat
new file mode 100644
index 0000000..c637d7c
--- /dev/null
+++ b/cordova-lib/spec-plugman/projects/android_one/cordova/version.bat
@@ -0,0 +1,2 @@
+@ECHO OFF
+echo 9.0.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/projects/android_uninstall/cordova/version
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/projects/android_uninstall/cordova/version b/cordova-lib/spec-plugman/projects/android_uninstall/cordova/version
old mode 100644
new mode 100755
index 01f68fd..3b8e2c5
--- a/cordova-lib/spec-plugman/projects/android_uninstall/cordova/version
+++ b/cordova-lib/spec-plugman/projects/android_uninstall/cordova/version
@@ -1 +1,22 @@
-echo 9.0.0
\ No newline at end of file
+#!/usr/bin/env node
+
+/*
+       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.
+*/
+
+console.log('9.0.0');

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/spec-plugman/util/config-changes.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/spec-plugman/util/config-changes.spec.js b/cordova-lib/spec-plugman/util/config-changes.spec.js
index c7137ee..d745c18 100644
--- a/cordova-lib/spec-plugman/util/config-changes.spec.js
+++ b/cordova-lib/spec-plugman/util/config-changes.spec.js
@@ -28,7 +28,7 @@ var configChanges = require('../../src/plugman/util/config-changes'),
     events  = require('../../src/events'),
     et      = require('elementtree'),
     path    = require('path'),
-    plist = require('plist-with-patches'),
+    plist = require('plist'),
     shell   = require('shelljs'),
     xcode = require('xcode'),
     temp    = path.join(os.tmpdir(), 'plugman'),

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/PluginInfo.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/PluginInfo.js b/cordova-lib/src/PluginInfo.js
index dcc1da5..94d6fb1 100644
--- a/cordova-lib/src/PluginInfo.js
+++ b/cordova-lib/src/PluginInfo.js
@@ -200,13 +200,6 @@ function PluginInfo(dirname) {
         var libFiles = _getTagsInPlatform(self._et, 'lib-file', platform, cloneAttribs);
         return libFiles;
     }
-
-    // Tell whether there is a <platform> section for the given platform.
-    self.hasPlatformSection = hasPlatformSection;
-    function hasPlatformSection(platform) {
-        var platformTag = pelem.find('./platform[@name="' + platform + '"]');
-        return !!platformTag;
-    }
     ///// End of PluginInfo methods /////
 
 
@@ -277,10 +270,15 @@ function loadPluginsDir(dirname) {
     var plugins = [];
     subdirs.forEach(function (subdir) {
         var d = path.join(dirname, subdir);
-        if (!fs.existsSync(path.join(d, 'plugin.xml')))
+        if (!fs.existsSync(path.join(d, 'plugin.xml'))) {
             return; // continue
-        var p = new PluginInfo(d);
-        plugins.push(p);
+        }
+        try {
+        	var p = new PluginInfo(d);
+        	plugins.push(p);
+        } catch (e) {
+        	// ignore errors while parsing so we can continue with searching
+        }
     });
     return plugins;
 }

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/configparser/ConfigParser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/configparser/ConfigParser.js b/cordova-lib/src/configparser/ConfigParser.js
index 84de2a6..da6376e 100644
--- a/cordova-lib/src/configparser/ConfigParser.js
+++ b/cordova-lib/src/configparser/ConfigParser.js
@@ -27,6 +27,15 @@ var et = require('elementtree'),
     CordovaError = require('../CordovaError'),
     fs = require('fs');
 
+/**
+ * Array of 'feature' params that are set as properties
+ * @type {string[]}
+ */
+var FEATURE_SPECIAL_PARAMS = [
+    'id',
+    'url',
+    'version'
+];
 
 /** Wraps a config.xml file */
 function ConfigParser(path) {
@@ -108,8 +117,12 @@ ConfigParser.prototype = {
     author: function() {
         return getNodeTextSafe(this.doc.find('author'));
     },
-    getPreference: function(name) {
+    getPreference: function(name, platform) {
         var preferences = this.doc.findall('preference');
+        if (platform) { // include platform specific preferences
+            preferences = preferences.concat(
+                this.doc.findall('platform[@name=\'' + platform + '\']/preference'));
+        }
         var ret = null;
         preferences.forEach(function (preference) {
             // Take the last one that matches.
@@ -217,6 +230,93 @@ ConfigParser.prototype = {
     },
 
     /**
+     * Returns a list of features (IDs)
+     * @return {string[]} Array of feature IDs
+     */
+    getFeatureIdList: function () {
+        var features = this.doc.findall('feature'),
+            feature, idTag, id,
+            result = [];
+
+        // Check for valid features that have IDs set
+        for (var i = 0, l = features.length; i < l; ++i) {
+            feature = features[i];
+            idTag = feature.find('./param[@name="id"]');
+            if (null === idTag) {
+                // Invalid feature
+                continue;
+            }
+            id = idTag.attrib.value;
+            if (!!id) {
+                // Has id and id is non-empty
+                result.push(id);
+            }
+        }
+
+        return result;
+    },
+
+    /**
+     * Gets feature info
+     * @param {string} id Feature id
+     * @returns {Feature} Feature object
+     */
+    getFeature: function(id) {
+        if (!id) {
+            return undefined;
+        }
+        var feature = this.doc.find('./feature/param[@name="id"][@value="' + id + '"]/..');
+        if (null === feature) {
+            return undefined;
+        }
+
+        var result = {};
+        result.id = id;
+        result.name = feature.attrib.name;
+
+        // Iterate params and fill-in 'params' structure
+        // For special cases like 'id', 'url, 'version' - copy to the main space
+        result.params = processChildren (
+            'param',
+            function(name, value) {
+                if (FEATURE_SPECIAL_PARAMS.indexOf(name) >= 0) {
+                    result[name] = value;
+                }
+            }
+        );
+
+        // Iterate preferences
+        result.variables = processChildren('variable');
+
+        return result;
+
+        /**
+         * Processes a set of children
+         * having a pair of 'name' and 'value' attributes
+         * filling in 'output' object
+         * @param {string} xPath Search expression
+         * @param {function} [specialProcessing] Performs some additional actions on each valid element
+         * @return {object} A transformed object
+         */
+        function processChildren (xPath, specialProcessing) {
+            var result = {};
+            var needsProcessing = 'function' === typeof specialProcessing;
+            var nodes = feature.findall(xPath);
+            nodes.forEach(function(param){
+                var name = param.attrib.name;
+                var value = param.attrib.value;
+                if (name) {
+                    result[name] = value;
+                    if (needsProcessing) {
+                        specialProcessing(name, value);
+                    }
+                }
+            });
+            return result;
+        }
+    },
+
+    /**
      *This does not check for duplicate feature entries
      */
     addFeature: function (name, params){

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/configparser/ConfigParser.spec.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/configparser/ConfigParser.spec.js b/cordova-lib/src/configparser/ConfigParser.spec.js
deleted file mode 100644
index a1ba102..0000000
--- a/cordova-lib/src/configparser/ConfigParser.spec.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
-    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.
-*/
-var path = require('path'),
-    fs = require('fs'),
-    ConfigParser = require('../src/cordova/ConfigParser'),
-    xml = path.join(__dirname, 'test-config.xml'),
-    xml_contents = fs.readFileSync(xml, 'utf-8');
-
-describe('config.xml parser', function () {
-    var readFile;
-    beforeEach(function() {
-        readFile = spyOn(fs, 'readFileSync').andReturn(xml_contents);
-    });
-
-    it('should create an instance based on an xml file', function() {
-        var cfg;
-        expect(function () {
-            cfg = new ConfigParser(xml);
-        }).not.toThrow();
-        expect(cfg).toBeDefined();
-        expect(cfg.doc).toBeDefined();
-    });
-
-    describe('methods', function() {
-        var cfg;
-        beforeEach(function() {
-            cfg = new ConfigParser(xml);
-        });
-
-        describe('package name / id', function() {
-            it('should get the (default) packagename', function() {
-                expect(cfg.packageName()).toEqual('io.cordova.hellocordova');
-            });
-            it('should allow setting the packagename', function() {
-                cfg.setPackageName('this.is.bat.country');
-                expect(cfg.packageName()).toEqual('this.is.bat.country');
-            });
-        });
-
-        describe('version', function() {
-            it('should get the version', function() {
-                expect(cfg.version()).toEqual('0.0.1');
-            });
-            it('should allow setting the version', function() {
-                cfg.setVersion('2.0.1');
-                expect(cfg.version()).toEqual('2.0.1');
-            });
-        });
-
-        describe('app name', function() {
-            it('should get the (default) app name', function() {
-                expect(cfg.name()).toEqual('Hello Cordova');
-            });
-            it('should allow setting the app name', function() {
-                cfg.setName('this.is.bat.country');
-                expect(cfg.name()).toEqual('this.is.bat.country');
-            });
-        });
-        describe('preference', function() {
-            it('should get value of existing preference', function() {
-                expect(cfg.getPreference('fullscreen')).toEqual('true');
-            });
-            it('should get undefined as non existing preference', function() {
-                expect(cfg.getPreference('zimzooo!')).toEqual(undefined);
-            });
-        });
-        describe('feature',function(){
-            it('should allow adding a new feature', function(){
-                cfg.addFeature('myfeature');
-                var features = cfg.doc.findall('feature');
-                expect(features[0].attrib.name).toEqual('myfeature');
-            });
-            it('should allow adding features with params', function(){
-                cfg.addFeature('afeature', JSON.parse('[{"name":"paraname", "value":"paravalue"}]'));
-                var features = cfg.doc.findall('feature');
-                expect(features[0].attrib.name).toEqual('afeature');
-                var params = features[0].findall('param');
-                expect(params[0].attrib.name).toEqual('paraname');
-                expect(params[0].attrib.value).toEqual('paravalue');
-            });
-        });
-    });
-});

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/create.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/create.js b/cordova-lib/src/cordova/create.js
index 7aef292..c8cb694 100644
--- a/cordova-lib/src/cordova/create.js
+++ b/cordova-lib/src/cordova/create.js
@@ -105,11 +105,15 @@ function create(dir, id, name, cfg) {
         config_json.lib.www.id = config_json.lib.www.id || 'dummy_id';
         symlink  = !!config_json.lib.www.link;
 
-        // Make sure that the source www/ is not a direct ancestor of the target www/, or else we will recursively copy forever.
-        // To do this, we make sure that the shortest relative path from source-to-target must start by going up at least one directory.
-        var relative_path_from_source_to_target = path.relative(config_json.lib.www.url, www_dir);
-        var does_relative_path_go_up_at_least_one_dir = relative_path_from_source_to_target.split(path.sep)[0] == '..';
-        if (!does_relative_path_go_up_at_least_one_dir) {
+        // Make sure that the source www/ is not a direct ancestor of the
+        // target www/, or else we will recursively copy forever. To do this,
+        // we make sure that the shortest relative path from source-to-target
+        // must start by going up at least one directory or with a drive
+        // letter for Windows.
+        var rel_path = path.relative(config_json.lib.www.url, www_dir);
+        var goes_up = rel_path.split(path.sep)[0] == '..';
+
+        if (!(goes_up || rel_path[1] == ':')) {
             throw new CordovaError(
                 'Project dir "' +
                 dir +

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js b/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
index 3b39605..517cd49 100644
--- a/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
+++ b/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js
@@ -54,16 +54,158 @@ module.exports.prototype = {
     },
 
     findAndroidLaunchModePreference: function(config) {
-        var ret = config.getPreference('AndroidLaunchMode');
-        var valid = ['standard', 'singleTop', 'singleTask', 'singleInstance'].indexOf(ret) !== -1;
-        if (ret && !valid) {
-            events.emit('warn', 'Unknown value for launchMode preference: ' + ret);
-            ret = null;
+        var launchMode = config.getPreference('AndroidLaunchMode');
+        if (!launchMode) {
+            // Return a default value
+            return 'singleTop';
         }
-
-        return ret;
+    
+        var expectedValues = ['standard', 'singleTop', 'singleTask', 'singleInstance'];
+        var valid = expectedValues.indexOf(launchMode) !== -1;
+        if (!valid) {
+            events.emit('warn', 'Unrecognized value for AndroidLaunchMode preference: ' + launchMode);
+            events.emit('warn', '  Expected values are: ' + expectedValues.join(', '));
+            // Note: warn, but leave the launch mode as developer wanted, in case the list of options changes in the future
+        }
+    
+        return launchMode;
     },
-
+    
+    // remove the default resource name from all drawable folders
+    // return the array of the densities in this project
+deleteDefaultResource:function(name) {
+    var densities = [];
+    var res = path.join(this.path, 'res');
+    var dirs = fs.readdirSync(res);
+    
+    for (var i=0; i<dirs.length; i++) {
+        var filename = dirs[i];
+        if (filename.indexOf('drawable-') === 0) {
+            var density = filename.substr(9);
+            densities.push(density);
+            var template = path.join(res, filename, name);
+            try {
+                fs.unlinkSync(template);
+                events.emit('verbose', 'deleted: ' + template);
+            } catch(e) {
+                // ignored. template screen does probably not exist
+            }
+        }
+    }
+    return densities;
+},
+    
+handleSplashes:function(config) {
+    var resources = config.getSplashScreens('android');
+    var destfilepath;
+    // if there are "splash" elements in config.xml
+    if (resources.length > 0) {
+        var densities = this.deleteDefaultResource('screen.png');
+        events.emit('verbose', 'splash screens: ' + JSON.stringify(resources));
+        var res = path.join(this.path, 'res');
+        
+        if (resources.defaultResource) {
+            destfilepath = path.join(res, 'drawable', 'screen.png');
+            events.emit('verbose', 'copying splash icon from ' + resources.defaultResource.src + ' to ' + destfilepath);
+            shell.cp('-f', resources.defaultResource.src, destfilepath);
+        }
+        for (var i=0; i<densities.length; i++) {
+            var density = densities[i];
+            var resource = resources.getByDensity(density);
+            if (resource) {
+                // copy splash screens.
+                destfilepath = path.join(res, 'drawable-' + density, 'screen.png');
+                events.emit('verbose', 'copying splash icon from ' + resource.src + ' to ' + destfilepath);
+                shell.cp('-f', resource.src, destfilepath);
+            }
+        }
+    }
+},
+    
+handleIcons: function(config) {
+    var icons = config.getIcons('android');
+    // if there are icon elements in config.xml
+    if (icons.length === 0) {
+        events.emit('verbose', 'This app does not have launcher icons defined');
+        return;
+    }
+    
+    var densities = this.deleteDefaultResource('icon.png');
+    
+    var android_icons = {};
+    var default_icon;
+    // http://developer.android.com/design/style/iconography.html
+    var densityToSizeMap = {
+        'ldpi' : 36,
+        'mdpi' : 48,
+        'hdpi' : 72,
+        'xhdpi' : 96
+    };
+    // find the best matching icon for a given density or size
+    // @output android_icons
+    var parseIcon = function(icon, icon_size, size, density) {
+        // do I have a platform icon for that density already
+        var previous = android_icons[density];
+        if (previous && previous.platform) {
+            return;
+        }
+        // already have one but this one is a platform icon
+        if (previous && icon.platform && icon.density == density) {
+            android_icons[density] = icon;
+            return;
+        }
+        // if density is explicitly defined take this one
+        if (density === icon.density) {
+            android_icons[density] = icon;
+            return;
+        }
+        if (size === parseInt(icon_size)) {
+            android_icons[density] = icon;
+        }
+    };
+    // iterate over all icon elements to find the default icon and call parseIcon
+    for (var i=0; i<icons.length; i++) {
+        var icon = icons[i];
+        var size = icon.width;
+        if (!size) {
+            size = icon.height;
+        }
+        if (!size && !icon.density) {
+            if (default_icon) {
+                events.emit('verbose', 'more than one default icon: ' + JSON.stringify(icon));
+            } else {
+                default_icon = icon;
+            }
+        } else {
+            for (var k=0; k<densities.length; k++) {
+                    parseIcon(icon, size, densityToSizeMap[densities[k]], densities[k]);
+                }
+            }
+        }
+        var projectRoot = util.isCordova(this.path);
+        var srcfilepath;
+        var destfilepath;
+        // copy the default icon to the drawable folder
+        if (default_icon) {
+            srcfilepath = path.join(projectRoot, default_icon.src);
+            destfilepath = path.join(this.path, 'res', 'drawable', 'icon.png');
+            events.emit('verbose', 'Copying default icon from ' + srcfilepath + ' to ' + destfilepath);
+            shell.cp('-f', srcfilepath, destfilepath);
+        }
+        // copyIcon does the actual copying into the drawable folders
+        var copyIcon = function(density) {
+            if (android_icons[density]) {
+                srcfilepath = path.join(projectRoot, android_icons[density].src);
+                destfilepath = path.join(this.path, 'res', 'drawable-'+density, 'icon.png');
+                events.emit('verbose', 'Copying icon from ' + srcfilepath + ' to ' + destfilepath);
+                shell.cp('-f', srcfilepath, destfilepath);
+            }
+        }.bind(this);
+        for (var j=0; j<densities.length; j++) {
+            copyIcon(densities[j]);
+        }
+    },
+    
     update_from_config:function(config) {
         // TODO: share code for this func with Android. Or fix it and remove
         // the below JSHint hacks line.
@@ -78,98 +220,9 @@ module.exports.prototype = {
         fs.writeFileSync(this.strings, strings.write({indent: 4}), 'utf-8');
         events.emit('verbose', 'Wrote out Android application name to "' + name + '"');
 
-        var icons = config.getIcons('amazon-fireos');
-        // if there are icon elements in config.xml
-        if (icons) {
-          var android_icons = {};
-          var projectRoot = util.isCordova(this.path);
-          var default_icon;
-          var max_size;
-          var max_density;
-          // http://developer.android.com/design/style/iconography.html
-          var densities = {
-            'ldpi' : 36,
-            'mdpi' : 48,
-            'hdpi' : 72,
-            'xhdpi' : 96
-          };
-          for (var i=0; i<icons.length; i++) {
-            var icon = icons[i];
-            var destfilepath;
-            var size = icon.width;
-            if (!size) {
-              size = icon.height;
-            }
-            if (!size && !icon.density) {
-              if (default_icon) {
-                  events.emit('verbose', 'more than one default icon: ' + JSON.stringify(icon));
-              } else {
-                  default_icon = icon;
-              }
-            } else {
-              var parseIcon = function(icon, icon_size, size, density) {
-                // if density is explicitly defined, no need to calculate it from width/height
-                if (icon.density) {
-                    android_icons[icon.density] = icon;
-                    return;
-                }
-
-                var i = parseInt(icon_size);
-                if (size == parseInt(icon_size)) {
-                  var previous = android_icons[density];
-                  if (previous) {
-                    // already have that density. platform rules
-                    if (!previous.platform) {
-                      android_icons[density] = icon;
-                    } // else already have a platform icon of that density
-                  } else {
-                    android_icons[density] = icon;
-                  }
-                  android_icons[density] = icon;
-                  if (!max_size) {
-                    max_size = size;
-                    max_density = density;
-                  } else {
-                    if (max_size < size) {
-                      max_size = size;
-                      max_density = density;
-                    }
-                  }
-                }
-              };
-              for (var density in densities) {
-                parseIcon(icon, size, densities[density], density);
-              }
-            }
-          }
-
-          var copyIcon = function(density) {
-            var srcfilepath;
-            var destfilepath = path.join(this.path, 'res', 'drawable-'+density, 'icon.png');
-            if (android_icons[density]) {
-              srcfilepath = path.join(projectRoot, android_icons[density].src);
-            } else {
-              if (default_icon) {
-                srcfilepath = path.join(projectRoot, default_icon.src);
-              } else {
-                if (max_density) {
-                  srcfilepath = path.join(projectRoot, android_icons[max_density].src);
-                } else {
-                  events.emit('verbose', 'no icon found matching Android typical densities');
-                }
-              }
-            }
-            if (srcfilepath) {
-                events.emit('verbose', 'Copying icon from ' + srcfilepath + ' to ' + destfilepath);
-                shell.cp('-f', srcfilepath, destfilepath);
-            }
-          }.bind(this);
-          for (var density in densities) {
-            copyIcon(density);
-          }
-
-        }
-
+        this.handleSplashes(config);
+        this.handleIcons(config);
+        
         var manifest = xml.parseElementtreeSync(this.manifest);
         // Update the version by changing the AndroidManifest android:versionName
         var version = config.version();

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/metadata/android_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/android_parser.js b/cordova-lib/src/cordova/metadata/android_parser.js
index 12a6d1f..9f338dd 100644
--- a/cordova-lib/src/cordova/metadata/android_parser.js
+++ b/cordova-lib/src/cordova/metadata/android_parser.js
@@ -23,6 +23,7 @@
 
 var fs            = require('fs'),
     path          = require('path'),
+    et            = require('elementtree'),
     xml           = require('../../util/xml-helpers'),
     util          = require('../util'),
     events        = require('../../events'),
@@ -261,6 +262,20 @@ module.exports.prototype = {
             delete act.attrib["android:launchMode"]; // use Android default value (standard)
         }
 
+        // Set min/max/target SDK version 
+        //<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" ... />
+        var usesSdk = manifest.getroot().find('./uses-sdk');
+        ['minSdkVersion', 'maxSdkVersion', 'targetSdkVersion'].forEach(function(sdkPrefName) {
+            var sdkPrefValue = config.getPreference('android-' + sdkPrefName, 'android');
+            if (!sdkPrefValue) return;
+            
+            if (!usesSdk) { // if there is no required uses-sdk element, we should create it first
+                usesSdk = new et.Element('uses-sdk');
+                manifest.getroot().append(usesSdk);
+            }
+            usesSdk.attrib['android:' + sdkPrefName] = sdkPrefValue;
+        });
+
         // Write out AndroidManifest.xml
         fs.writeFileSync(this.manifest, manifest.write({indent: 4}), 'utf-8');
 

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/metadata/firefoxos_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/firefoxos_parser.js b/cordova-lib/src/cordova/metadata/firefoxos_parser.js
index 0ec5b6d..b4e435e 100644
--- a/cordova-lib/src/cordova/metadata/firefoxos_parser.js
+++ b/cordova-lib/src/cordova/metadata/firefoxos_parser.js
@@ -49,8 +49,8 @@ module.exports.prototype = {
 
         // overwrite properties existing in config.xml
         var contentNode = config.doc.find('content');
-        var contentSrc = contentNode.attrib['src'];
-        manifest.launch_path = path.join('/', contentSrc) || '/index.html';
+        var contentSrc = contentNode && contentNode.attrib['src'] || 'index.html';
+        manifest.launch_path = '/' + contentSrc;
 
         manifest.installs_allowed_from = manifest.installs_allowed_from || ['*'];
         manifest.version = config.version();
@@ -61,7 +61,7 @@ module.exports.prototype = {
         };
 
         var authorNode = config.doc.find('author');
-        var authorUrl = authorNode.attrib['href'];
+        var authorUrl = authorNode && authorNode.attrib['href'];
 
         if (authorUrl) {
             manifest.developer.url = authorUrl;

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/metadata/ios_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/ios_parser.js b/cordova-lib/src/cordova/metadata/ios_parser.js
index fa136dc..b853fab 100644
--- a/cordova-lib/src/cordova/metadata/ios_parser.js
+++ b/cordova-lib/src/cordova/metadata/ios_parser.js
@@ -29,7 +29,7 @@ var fs            = require('fs'),
     util          = require('../util'),
     events        = require('../../events'),
     shell         = require('shelljs'),
-    plist         = require('plist-with-patches'),
+    plist         = require('plist'),
     Q             = require('q'),
     ConfigParser  = require('../../configparser/ConfigParser'),
     CordovaError  = require('../../CordovaError');
@@ -65,7 +65,7 @@ module.exports.prototype = {
 
         // Update package id (bundle id)
         var plistFile = path.join(this.cordovaproj, this.originalName + '-Info.plist');
-        var infoPlist = plist.parseFileSync(plistFile);
+        var infoPlist = plist.parse(fs.readFileSync(plistFile, 'utf8'));
         infoPlist['CFBundleIdentifier'] = pkg;
 
         // Update version (bundle version)
@@ -134,11 +134,17 @@ module.exports.prototype = {
                 shell.cp('-f', src, dest);
             }
         });
+        
+        var me = this;
+        return this.update_build_settings(config).then(function() {
+            if (name == me.originalName) {
+                events.emit('verbose', 'iOS Product Name has not changed (still "' + me.originalName + '")');
+                return Q();
+            }
 
-        if (name != this.originalName) {
             // Update product name inside pbxproj file
-            var proj = new xcode.project(this.pbxproj);
-            var parser = this;
+            var proj = new xcode.project(me.pbxproj);
+            var parser = me;
             var d = Q.defer();
             proj.parse(function(err,hash) {
                 if (err) {
@@ -163,10 +169,7 @@ module.exports.prototype = {
                 }
             });
             return d.promise;
-        } else {
-            events.emit('verbose', 'iOS Product Name has not changed (still "' + this.originalName + '")');
-            return Q();
-        }
+        });
     },
 
     // Returns the platform-specific www directory.
@@ -217,6 +220,37 @@ module.exports.prototype = {
             self.update_overrides();
             util.deleteSvnFolders(self.www_dir());
         });
+    },
+
+    update_build_settings:function(config) {
+        var targetDevice = parseTargetDevicePreference(config.getPreference('target-device', 'ios'));
+        var deploymentTarget = config.getPreference('deployment-target', 'ios');
+
+        // no build settings provided, we don't need to parse and update .pbxproj file
+        if (!targetDevice && !deploymentTarget) {
+            return Q();
+        }
+
+        var me = this;
+        var d = Q.defer();
+        var proj = new xcode.project(this.pbxproj);
+        proj.parse(function(err,hash) {
+            if (err) {
+                d.reject(new Error('An error occured during parsing of project.pbxproj. Start weeping. Output: ' + err));
+                return;
+            }
+            if (targetDevice) {
+                events.emit('verbose', 'Set TARGETED_DEVICE_FAMILY to ' + targetDevice + '.');
+                proj.updateBuildProperty('TARGETED_DEVICE_FAMILY', targetDevice);
+            }
+            if (deploymentTarget) {
+                events.emit('verbose', 'Set IPHONEOS_DEPLOYMENT_TARGET to "' + deploymentTarget + '".');
+                proj.updateBuildProperty('IPHONEOS_DEPLOYMENT_TARGET', deploymentTarget);
+            }
+            fs.writeFileSync(me.pbxproj, proj.writeSync(), 'utf-8');
+            d.resolve();
+        });
+        return d.promise;
     }
 };
 
@@ -226,3 +260,14 @@ module.exports.prototype = {
 function default_CFBundleVersion(version) {
     return version.split('-')[0];
 }
+
+// Converts cordova specific representation of target device to XCode value
+function parseTargetDevicePreference(value) {
+    if (!value) return null;
+    var map = { 'universal': '"1,2"', 'handset': '"1"', 'tablet': '"2"'};
+    if (map[value.toLowerCase()]) {
+        return map[value.toLowerCase()];
+    }
+    events.emit('warn', 'Unknown target-device preference value: "' + value + '".');
+    return null;
+}

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/metadata/ubuntu_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/ubuntu_parser.js b/cordova-lib/src/cordova/metadata/ubuntu_parser.js
index 634a575..a199662 100644
--- a/cordova-lib/src/cordova/metadata/ubuntu_parser.js
+++ b/cordova-lib/src/cordova/metadata/ubuntu_parser.js
@@ -87,14 +87,18 @@ module.exports.prototype = {
                          architecture: arch,
                          description: sanitize(this.config.description()) };
 
-        var name = this.config.name().replace(/\n/g, ' '); //FIXME: escaping
-        var content = '[Desktop Entry]\nName=' + name + '\nExec=./cordova-ubuntu www/\nIcon=qmlscene\nTerminal=false\nType=Application\nX-Ubuntu-Touch=true';
-
-        name = sanitize(this.config.name()); //FIXME: escaping
-        content = '[Desktop Entry]\nName=' + name + '\nExec=./cordova-ubuntu www/\nTerminal=false\nType=Application\nX-Ubuntu-Touch=true';
-
-        if (this.config.doc.find('icon') && this.config.doc.find('icon').attrib.src && fs.existsSync(path.join(this.path, 'www', this.config.doc.find('icon').attrib.src))) {
-            content += '\nIcon=www/' + this.config.doc.find('icon').attrib.src;
+        var name = sanitize(this.config.name()); //FIXME: escaping
+        var content = '[Desktop Entry]\nName=' + name + '\nExec=./cordova-ubuntu www/\nTerminal=false\nType=Application\nX-Ubuntu-Touch=true';
+
+        if (this.config.doc.find('icon') && this.config.doc.find('icon').attrib.src) {
+            var iconPath = path.join(this.path, 'www', this.config.doc.find('icon').attrib.src);
+            if (fs.existsSync(iconPath))
+                content += '\nIcon=www/' + this.config.doc.find('icon').attrib.src;
+            else
+                return Q.reject(new Error('icon does not exist: ' + iconPath));
+        } else {
+            content += '\nIcon=qmlscene';
+            console.warn('missing icon element in config.xml');
         }
         fs.writeFileSync(path.join(this.path, 'manifest.json'), JSON.stringify(manifest));
         fs.writeFileSync(path.join(this.path, 'cordova.desktop'), content);

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/metadata/windows_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/windows_parser.js b/cordova-lib/src/cordova/metadata/windows_parser.js
index 733473d..353d68b 100644
--- a/cordova-lib/src/cordova/metadata/windows_parser.js
+++ b/cordova-lib/src/cordova/metadata/windows_parser.js
@@ -30,8 +30,7 @@ var fs            = require('fs'),
     ConfigParser  = require('../../configparser/ConfigParser'),
     CordovaError  = require('../../CordovaError'),
     xml           = require('../../util/xml-helpers'),
-    hooker        = require('../hooker'),
-    jsproj        = require('../../util/windows/jsproj');
+    hooker        = require('../hooker');
 
 module.exports = function windows_parser(project) {
     try {
@@ -232,42 +231,6 @@ module.exports.prototype = {
         shell.cp('-rf', path.join(platform_www, '*'), this.www_dir());
     },
 
-    // Returns an array of all the files in the given directory with relative paths
-    // - name     : the name of the top level directory (i.e all files will start with this in their path)
-    // - dir     : the directory whos contents will be listed under 'name' directory
-    folder_contents:function(name, dir) {
-        var results = [];
-        var folder_dir = fs.readdirSync(dir);
-        for(var item in folder_dir) {
-            var stat = fs.statSync(path.join(dir, folder_dir[item]));
-            // Add all subfolder item paths if it's not a .svn dir.
-            if( stat.isDirectory() && (folder_dir[item] !== '.svn') ) {
-                var sub_dir = this.folder_contents(path.join(name, folder_dir[item]), path.join(dir, folder_dir[item]));
-                for(var sub_item in sub_dir) {
-                    results.push(sub_dir[sub_item]);
-                }
-            } else if(stat.isFile()) {
-                results.push(path.join(name, folder_dir[item]));
-            }
-            // else { it is a FIFO, or a Socket, Symbolic Link or something ... }
-        }
-        return results;
-    },
-
-    // updates the jsproj file to explicitly list all www content.
-    update_jsproj:function() {
-        var projFile = new jsproj(this.projFilePath);
-        // remove any previous references to the www files
-        projFile.removeSourceFile(/^(\$\(MSBuildThisFileDirectory\))?www\\/i);
-
-        // now add all www references back in from the root www folder
-        var www_files = this.folder_contents('www', this.www_dir());
-        projFile.addSourceFile(www_files);
-
-        // save file
-        projFile.write();
-    },
-
     // calls the nessesary functions to update the windows8 project
     update_project:function(cfg) {
         // console.log("Updating windows8 project...");
@@ -285,7 +248,6 @@ module.exports.prototype = {
         return hooks.fire('pre_package', { wwwPath:this.www_dir(), platforms: [this.isOldProjectTemplate ? 'windows8' : 'windows'] })
         .then(function() {
             // overrides (merges) are handled in update_www()
-            that.update_jsproj();
             that.add_bom();
             util.deleteSvnFolders(that.www_dir());
         });

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/metadata/wp8_parser.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/metadata/wp8_parser.js b/cordova-lib/src/cordova/metadata/wp8_parser.js
index 0d458ee..4d5b332 100644
--- a/cordova-lib/src/cordova/metadata/wp8_parser.js
+++ b/cordova-lib/src/cordova/metadata/wp8_parser.js
@@ -30,8 +30,7 @@ var fs            = require('fs'),
     ConfigParser  = require('../../configparser/ConfigParser'),
     CordovaError  = require('../../CordovaError'),
     xml           = require('../../util/xml-helpers'),
-    hooker        = require('../hooker'),
-    csproj = require('../../util/windows/csproj');
+    hooker        = require('../hooker');
 
 module.exports = function wp8_parser(project) {
     try {
@@ -197,43 +196,6 @@ module.exports.prototype = {
         shell.cp('-rf', path.join(platform_www, '*'), this.www_dir());
     },
 
-    // updates the csproj file to explicitly list all www content.
-    update_csproj:function() {
-        var projFile = new csproj(this.csproj_path);
-
-        // remove any previous references to the www files
-        projFile.removeSourceFile(new RegExp('www\\\\*', 'i'));
-
-        // now add all www references back in from the root www folder
-        var www_files = this.folder_contents('www', this.www_dir());
-        projFile.addSourceFile(www_files);
-        // save file
-        projFile.write();
-    },
-    // Returns an array of all the files in the given directory with relative paths
-    // - name     : the name of the top level directory (i.e all files will start with this in their path)
-    // - dir     : the directory whos contents will be listed under 'name' directory
-    folder_contents:function(name, dir) {
-        var results = [];
-        var folder_dir = fs.readdirSync(dir);
-        for(var item in folder_dir) {
-            var stat = fs.statSync(path.join(dir, folder_dir[item]));
-
-            if(stat.isDirectory()) {
-                var sub_dir = this.folder_contents(path.join(name, folder_dir[item]), path.join(dir, folder_dir[item]));
-                //Add all subfolder item paths
-                for(var sub_item in sub_dir) {
-                    results.push(sub_dir[sub_item]);
-                }
-            }
-            else if(stat.isFile()) {
-                results.push(path.join(name, folder_dir[item]));
-            }
-            // else { it is a FIFO, or a Socket or something ... }
-        }
-        return results;
-    },
-
     // calls the nessesary functions to update the wp8 project
     // Returns a promise.
     update_project:function(cfg) {
@@ -250,7 +212,6 @@ module.exports.prototype = {
         var hooks = new hooker(projectRoot);
         return hooks.fire('pre_package', { wwwPath:this.www_dir(), platforms: ['wp8']  })
         .then(function() {
-            that.update_csproj();
             util.deleteSvnFolders(that.www_dir());
         });
     }

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/platform.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/platform.js b/cordova-lib/src/cordova/platform.js
index dca8ed4..487803e 100644
--- a/cordova-lib/src/cordova/platform.js
+++ b/cordova-lib/src/cordova/platform.js
@@ -46,17 +46,6 @@ for (var p in platforms) {
     module.exports[p] = platforms[p];
 }
 
-function getVersionFromScript(script, defaultValue) {
-    var versionPromise = Q(defaultValue);
-    if (fs.existsSync(script)) {
-        versionPromise = superspawn.spawn(script);
-    } else {
-        /* if you are here, it's probably because you're in Jasmine: fix your existsSync stub */
-        versionPromise = Q(defaultValue);
-    }
-    return versionPromise;
-}
-
 function add(hooks, projectRoot, targets, opts) {
     var msg;
     if ( !targets || !targets.length ) {
@@ -111,6 +100,9 @@ function add(hooks, projectRoot, targets, opts) {
                 // Package names for Cordova platforms look like "cordova-ios".
                 var nameParts = pkg.name.split('-');
                 var name = nameParts[1];
+                if (name == 'amazon') {
+                    name = 'amazon-fireos';
+                }
                 if( !platforms[name] ) {
                     throw new CordovaError(msg);
                 }
@@ -219,7 +211,7 @@ function check(hooks, projectRoot) {
                 d_cur = Q.defer();
             add(h, scratch, [p], {spawnoutput: {stdio: 'ignore'}})
             .then(function() {
-                getVersionFromScript(path.join(scratch, 'platforms', p, 'cordova', 'version'), null)
+                superspawn.maybeSpawn(path.join(scratch, 'platforms', p, 'cordova', 'version'))
                 .then(function(avail) {
                     if (!avail) {
                         /* Platform version script was silent, we can't work with this */
@@ -237,7 +229,7 @@ function check(hooks, projectRoot) {
                 d_avail.resolve('install-failed');
             });
 
-            getVersionFromScript(path.join(projectRoot, 'platforms', p, 'cordova', 'version'), null)
+            superspawn.maybeSpawn(path.join(projectRoot, 'platforms', p, 'cordova', 'version'))
             .then(function(v) {
                 d_cur.resolve(v || '');
             }).catch(function () {
@@ -300,7 +292,7 @@ function list(hooks, projectRoot) {
     .then(function() {
         // Acquire the version number of each platform we have installed, and output that too.
         return Q.all(platforms_on_fs.map(function(p) {
-            return getVersionFromScript(path.join(projectRoot, 'platforms', p, 'cordova', 'version'), null)
+            return superspawn.maybeSpawn(path.join(projectRoot, 'platforms', p, 'cordova', 'version'))
             .then(function(v) {
                 if (!v) return p;
                 return p + ' ' + v;
@@ -347,12 +339,16 @@ function platform(command, targets, opts) {
             var pPath = path.resolve(t);
             if (fs.existsSync(pPath)) return;
             // Neither path, nor platform name - throw.
-            var msg = 'Platform "' + t +
+            var msg;
+            if (/[~:/\\.]/.test(t)) {
+                msg = 'Platform path "' + t + '" not found.';
+            } else {
+                msg = 'Platform "' + t +
                 '" not recognized as a core cordova platform. See `' +
                 cordova_util.binname + ' platform list`.'
                 ;
+            }
             throw new CordovaError(msg);
-
         });
     } else if (command == 'add' || command == 'rm') {
         msg = 'You need to qualify `add` or `remove` with one or more platforms!';
@@ -420,7 +416,6 @@ function call_into_create(target, projectRoot, cfg, libDir, template_dir, opts)
         }
     } else if (target == 'ios') {
         platformVersion = fs.readFileSync(path.join(libDir, 'CordovaLib', 'VERSION'), 'UTF-8').trim();
-        args.push('--arc');
         if (semver.gt(platformVersion, '3.3.0')) {
             args.push('--cli');
         }
@@ -451,7 +446,22 @@ function call_into_create(target, projectRoot, cfg, libDir, template_dir, opts)
         return plugins.reduce(function(soFar, plugin) {
             return soFar.then(function() {
                 events.emit('verbose', 'Installing plugin "' + plugin + '" following successful platform add of ' + target);
-                return plugman.raw.install(target, output, path.basename(plugin), plugins_dir);
+                plugin = path.basename(plugin);
+                var options = (function(){
+                    // Get plugin preferences from config features if have any
+                    // Pass them as cli_variables to plugman
+                    var feature = cfg.getFeature(plugin);
+                    var variables = feature && feature.variables;
+                    if (!!variables) {
+                        events.emit('verbose', 'Found variables for "' + plugin + '". Processing as cli_variables.');
+                        return {
+                            cli_variables: variables
+                        };
+                    }
+                    return null;
+                })();
+
+                return plugman.raw.install(target, output, plugin, plugins_dir, options);
             });
         }, Q());
     });

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/platforms.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/platforms.js b/cordova-lib/src/cordova/platforms.js
index 2adbf42..e52b0a8 100644
--- a/cordova-lib/src/cordova/platforms.js
+++ b/cordova-lib/src/cordova/platforms.js
@@ -26,60 +26,60 @@ module.exports = {
         hostos : ['darwin'],
         parser : './metadata/ios_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-ios.git',
-        version: '3.5.0'
+        version: '3.6.1'
     },
     'android' : {
         parser : './metadata/android_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git',
-        version: '3.5.1'
+        version: '3.6.1'
     },
     'ubuntu' : {
         hostos : ['linux'],
         parser : './metadata/ubuntu_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-ubuntu.git',
-        version: '3.5.0'
+        version: '3.6.1'
     },
     'amazon-fireos' : {
         parser : './metadata/amazon_fireos_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-amazon-fireos.git',
-        version: '3.5.0'
+        version: '3.6.1'
     },
     'wp8' : {
         hostos : ['win32'],
         parser : './metadata/wp8_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-wp8.git',
-        version: '3.5.0',
+        version: '3.6.1',
         altplatform: 'wp',
         subdirectory: 'wp8'
     },
     'blackberry10' : {
         parser : './metadata/blackberry10_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-blackberry.git',
-        version: '3.5.0'
+        version: '3.6.1'
     },
     'www':{
         hostos : [],
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-app-hello-world.git',
         source : 'git',
-        version: '3.5.0'
+        version: '3.6.1'
     },
     'firefoxos':{
         parser: './metadata/firefoxos_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-firefoxos.git',
-        version: '3.5.0'
+        version: '3.6.1'
     },
     'windows8':{
         hostos : ['win32'],
         parser: './metadata/windows_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-windows.git',
-        version: 'master',
+        version: '3.6.1',
         subdirectory: 'windows'
     },
     'windows':{
         hostos : ['win32'],
         parser: './metadata/windows_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-windows.git',
-        version: 'master',
+        version: '3.6.1',
         subdirectory: 'windows'
     },
     'browser':{

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/62bdd246/cordova-lib/src/cordova/prepare.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/prepare.js b/cordova-lib/src/cordova/prepare.js
index d5f3729..8b4b545 100644
--- a/cordova-lib/src/cordova/prepare.js
+++ b/cordova-lib/src/cordova/prepare.js
@@ -126,7 +126,7 @@ function prepare(options) {
     });
 }
 
-var BLACKLIST = ['platform'];
+var BLACKLIST = ['platform', 'feature'];
 var SINGLETONS = ['content', 'author'];
 function mergeXml(src, dest, platform, clobber) {
     // Do nothing for blacklisted tags.


[4/6] git commit: readded npm-shrinkwrap.json

Posted by st...@apache.org.
readded npm-shrinkwrap.json


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

Branch: refs/heads/master
Commit: c92cf55d10e659920f71961736e2be34eb066bcd
Parents: f298e9c
Author: Marcel Kinard <cm...@gmail.com>
Authored: Tue Sep 16 14:40:53 2014 -0400
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Sep 22 15:03:17 2014 -0700

----------------------------------------------------------------------
 cordova-lib/npm-shrinkwrap.json | 2136 ++++++++++++++++++++++++++++++++++
 cordova-lib/package.json        |    4 +-
 2 files changed, 2138 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/c92cf55d/cordova-lib/npm-shrinkwrap.json
----------------------------------------------------------------------
diff --git a/cordova-lib/npm-shrinkwrap.json b/cordova-lib/npm-shrinkwrap.json
new file mode 100644
index 0000000..0e03299
--- /dev/null
+++ b/cordova-lib/npm-shrinkwrap.json
@@ -0,0 +1,2136 @@
+{
+  "name": "cordova-lib",
+  "version": "0.21.12",
+  "dependencies": {
+    "bplist-parser": {
+      "version": "0.0.5",
+      "from": "bplist-parser@0.0.5",
+      "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.5.tgz"
+    },
+    "cordova-js": {
+      "version": "3.6.4",
+      "dependencies": {
+        "uglify-js": {
+          "version": "2.4.13",
+          "from": "uglify-js@2.4.x",
+          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.13.tgz",
+          "dependencies": {
+            "async": {
+              "version": "0.2.10",
+              "from": "async@~0.2.6"
+            },
+            "source-map": {
+              "version": "0.1.33",
+              "from": "source-map@~0.1.33",
+              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.33.tgz",
+              "dependencies": {
+                "amdefine": {
+                  "version": "0.1.0",
+                  "from": "amdefine@>=0.0.4"
+                }
+              }
+            },
+            "optimist": {
+              "version": "0.3.7",
+              "from": "optimist@~0.3.5",
+              "dependencies": {
+                "wordwrap": {
+                  "version": "0.0.2",
+                  "from": "wordwrap@~0.0.2"
+                }
+              }
+            },
+            "uglify-to-browserify": {
+              "version": "1.0.2",
+              "from": "uglify-to-browserify@~1.0.0",
+              "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz"
+            }
+          }
+        },
+        "browserify": {
+          "version": "5.11.2",
+          "from": "browserify@5.11.2",
+          "resolved": "https://registry.npmjs.org/browserify/-/browserify-5.11.2.tgz",
+          "dependencies": {
+            "JSONStream": {
+              "version": "0.8.4",
+              "from": "JSONStream@~0.8.3",
+              "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
+              "dependencies": {
+                "jsonparse": {
+                  "version": "0.0.5",
+                  "from": "jsonparse@0.0.5",
+                  "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz"
+                }
+              }
+            },
+            "assert": {
+              "version": "1.1.2",
+              "from": "assert@~1.1.0",
+              "resolved": "https://registry.npmjs.org/assert/-/assert-1.1.2.tgz"
+            },
+            "browser-pack": {
+              "version": "3.1.1",
+              "from": "browser-pack@^3.0.0",
+              "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-3.1.1.tgz",
+              "dependencies": {
+                "combine-source-map": {
+                  "version": "0.3.0",
+                  "from": "combine-source-map@~0.3.0",
+                  "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.3.0.tgz",
+                  "dependencies": {
+                    "inline-source-map": {
+                      "version": "0.3.0",
+                      "from": "inline-source-map@~0.3.0",
+                      "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.3.0.tgz"
+                    },
+                    "convert-source-map": {
+                      "version": "0.3.5",
+                      "from": "convert-source-map@~0.3.0",
+                      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz"
+                    },
+                    "source-map": {
+                      "version": "0.1.39",
+                      "from": "source-map@~0.1.31",
+                      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.39.tgz",
+                      "dependencies": {
+                        "amdefine": {
+                          "version": "0.1.0",
+                          "from": "amdefine@>=0.0.4",
+                          "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+                        }
+                      }
+                    }
+                  }
+                },
+                "through2": {
+                  "version": "0.5.1",
+                  "from": "through2@~0.5.1",
+                  "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz"
+                }
+              }
+            },
+            "browser-resolve": {
+              "version": "1.3.2",
+              "from": "browser-resolve@^1.3.0",
+              "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.3.2.tgz"
+            },
+            "browserify-zlib": {
+              "version": "0.1.4",
+              "from": "browserify-zlib@~0.1.2",
+              "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+              "dependencies": {
+                "pako": {
+                  "version": "0.2.5",
+                  "from": "pako@~0.2.0",
+                  "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.5.tgz"
+                }
+              }
+            },
+            "buffer": {
+              "version": "2.7.0",
+              "from": "buffer@^2.3.0",
+              "resolved": "https://registry.npmjs.org/buffer/-/buffer-2.7.0.tgz",
+              "dependencies": {
+                "base64-js": {
+                  "version": "0.0.7",
+                  "from": "base64-js@0.0.7",
+                  "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.7.tgz"
+                },
+                "ieee754": {
+                  "version": "1.1.4",
+                  "from": "ieee754@^1.1.4",
+                  "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.4.tgz"
+                },
+                "is-array": {
+                  "version": "1.0.1",
+                  "from": "is-array@^1.0.1",
+                  "resolved": "https://registry.npmjs.org/is-array/-/is-array-1.0.1.tgz"
+                }
+              }
+            },
+            "builtins": {
+              "version": "0.0.7",
+              "from": "builtins@~0.0.3",
+              "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz"
+            },
+            "commondir": {
+              "version": "0.0.1",
+              "from": "commondir@0.0.1",
+              "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz"
+            },
+            "concat-stream": {
+              "version": "1.4.6",
+              "from": "concat-stream@~1.4.1",
+              "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.6.tgz",
+              "dependencies": {
+                "typedarray": {
+                  "version": "0.0.6",
+                  "from": "typedarray@~0.0.5",
+                  "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
+                },
+                "readable-stream": {
+                  "version": "1.1.13",
+                  "from": "readable-stream@~1.1.9",
+                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+                  "dependencies": {
+                    "core-util-is": {
+                      "version": "1.0.1",
+                      "from": "core-util-is@~1.0.0",
+                      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+                    },
+                    "string_decoder": {
+                      "version": "0.10.31",
+                      "from": "string_decoder@~0.10.x",
+                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+                    }
+                  }
+                }
+              }
+            },
+            "console-browserify": {
+              "version": "1.1.0",
+              "from": "console-browserify@^1.1.0",
+              "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+              "dependencies": {
+                "date-now": {
+                  "version": "0.1.4",
+                  "from": "date-now@^0.1.4",
+                  "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz"
+                }
+              }
+            },
+            "constants-browserify": {
+              "version": "0.0.1",
+              "from": "constants-browserify@~0.0.1",
+              "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz"
+            },
+            "crypto-browserify": {
+              "version": "3.0.2",
+              "from": "crypto-browserify@^3.0.0",
+              "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.0.2.tgz",
+              "dependencies": {
+                "ripemd160": {
+                  "version": "0.2.0",
+                  "from": "ripemd160@0.2.0",
+                  "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz"
+                },
+                "sha.js": {
+                  "version": "2.1.8",
+                  "from": "sha.js@2.1.8",
+                  "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.1.8.tgz",
+                  "dependencies": {
+                    "buffer": {
+                      "version": "2.3.4",
+                      "from": "buffer@~2.3.2",
+                      "resolved": "https://registry.npmjs.org/buffer/-/buffer-2.3.4.tgz",
+                      "dependencies": {
+                        "base64-js": {
+                          "version": "0.0.7",
+                          "from": "base64-js@~0.0.4",
+                          "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.7.tgz"
+                        },
+                        "ieee754": {
+                          "version": "1.1.4",
+                          "from": "ieee754@~1.1.1",
+                          "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.4.tgz"
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            },
+            "deep-equal": {
+              "version": "0.2.1",
+              "from": "deep-equal@~0.2.1"
+            },
+            "defined": {
+              "version": "0.0.0",
+              "from": "defined@~0.0.0",
+              "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz"
+            },
+            "deps-sort": {
+              "version": "1.3.5",
+              "from": "deps-sort@^1.3.5",
+              "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.5.tgz",
+              "dependencies": {
+                "minimist": {
+                  "version": "0.2.0",
+                  "from": "minimist@~0.2.0",
+                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz"
+                },
+                "through2": {
+                  "version": "0.5.1",
+                  "from": "through2@~0.5.1",
+                  "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz"
+                }
+              }
+            },
+            "domain-browser": {
+              "version": "1.1.2",
+              "from": "domain-browser@~1.1.0",
+              "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.2.tgz"
+            },
+            "duplexer2": {
+              "version": "0.0.2",
+              "from": "duplexer2@~0.0.2",
+              "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
+              "dependencies": {
+                "readable-stream": {
+                  "version": "1.1.13",
+                  "from": "readable-stream@~1.1.9",
+                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+                  "dependencies": {
+                    "core-util-is": {
+                      "version": "1.0.1",
+                      "from": "core-util-is@~1.0.0",
+                      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+                    },
+                    "string_decoder": {
+                      "version": "0.10.31",
+                      "from": "string_decoder@~0.10.x",
+                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+                    }
+                  }
+                }
+              }
+            },
+            "events": {
+              "version": "1.0.2",
+              "from": "events@~1.0.0",
+              "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz"
+            },
+            "glob": {
+              "version": "4.0.5",
+              "from": "glob@^4.0.5",
+              "resolved": "https://registry.npmjs.org/glob/-/glob-4.0.5.tgz",
+              "dependencies": {
+                "minimatch": {
+                  "version": "1.0.0",
+                  "from": "minimatch@^1.0.0",
+                  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
+                  "dependencies": {
+                    "lru-cache": {
+                      "version": "2.5.0",
+                      "from": "lru-cache@2",
+                      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+                    },
+                    "sigmund": {
+                      "version": "1.0.0",
+                      "from": "sigmund@~1.0.0",
+                      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+                    }
+                  }
+                },
+                "once": {
+                  "version": "1.3.0",
+                  "from": "once@^1.3.0",
+                  "resolved": "https://registry.npmjs.org/once/-/once-1.3.0.tgz"
+                },
+                "graceful-fs": {
+                  "version": "3.0.2",
+                  "from": "graceful-fs@^3.0.2",
+                  "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz"
+                }
+              }
+            },
+            "http-browserify": {
+              "version": "1.6.0",
+              "from": "http-browserify@^1.4.0",
+              "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.6.0.tgz",
+              "dependencies": {
+                "Base64": {
+                  "version": "0.2.1",
+                  "from": "Base64@~0.2.0",
+                  "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz"
+                }
+              }
+            },
+            "https-browserify": {
+              "version": "0.0.0",
+              "from": "https-browserify@~0.0.0",
+              "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.0.tgz"
+            },
+            "inherits": {
+              "version": "2.0.1",
+              "from": "inherits@~2.0.1",
+              "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+            },
+            "insert-module-globals": {
+              "version": "6.1.0",
+              "from": "insert-module-globals@^6.1.0",
+              "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.1.0.tgz",
+              "dependencies": {
+                "JSONStream": {
+                  "version": "0.7.4",
+                  "from": "JSONStream@~0.7.1",
+                  "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.7.4.tgz",
+                  "dependencies": {
+                    "jsonparse": {
+                      "version": "0.0.5",
+                      "from": "jsonparse@0.0.5",
+                      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz"
+                    }
+                  }
+                },
+                "lexical-scope": {
+                  "version": "1.1.0",
+                  "from": "lexical-scope@~1.1.0",
+                  "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.1.0.tgz",
+                  "dependencies": {
+                    "astw": {
+                      "version": "1.1.0",
+                      "from": "astw@~1.1.0",
+                      "resolved": "https://registry.npmjs.org/astw/-/astw-1.1.0.tgz",
+                      "dependencies": {
+                        "esprima-fb": {
+                          "version": "3001.1.0-dev-harmony-fb",
+                          "from": "esprima-fb@3001.1.0-dev-harmony-fb",
+                          "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"
+                        }
+                      }
+                    }
+                  }
+                },
+                "process": {
+                  "version": "0.6.0",
+                  "from": "process@~0.6.0",
+                  "resolved": "https://registry.npmjs.org/process/-/process-0.6.0.tgz"
+                }
+              }
+            },
+            "isarray": {
+              "version": "0.0.1",
+              "from": "isarray@0.0.1",
+              "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
+            },
+            "labeled-stream-splicer": {
+              "version": "1.0.0",
+              "from": "labeled-stream-splicer@^1.0.0",
+              "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.0.tgz",
+              "dependencies": {
+                "stream-splicer": {
+                  "version": "1.3.0",
+                  "from": "stream-splicer@^1.1.0",
+                  "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.0.tgz",
+                  "dependencies": {
+                    "readable-stream": {
+                      "version": "1.1.13",
+                      "from": "readable-stream@^1.1.13-1",
+                      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+                      "dependencies": {
+                        "core-util-is": {
+                          "version": "1.0.1",
+                          "from": "core-util-is@~1.0.0",
+                          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+                        },
+                        "string_decoder": {
+                          "version": "0.10.31",
+                          "from": "string_decoder@~0.10.x",
+                          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+                        }
+                      }
+                    },
+                    "readable-wrap": {
+                      "version": "1.0.0",
+                      "from": "readable-wrap@^1.0.0",
+                      "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz"
+                    },
+                    "indexof": {
+                      "version": "0.0.1",
+                      "from": "indexof@0.0.1",
+                      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz"
+                    }
+                  }
+                }
+              }
+            },
+            "module-deps": {
+              "version": "3.5.5",
+              "from": "module-deps@^3.5.0",
+              "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.5.5.tgz",
+              "dependencies": {
+                "JSONStream": {
+                  "version": "0.7.4",
+                  "from": "JSONStream@~0.7.1",
+                  "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.7.4.tgz",
+                  "dependencies": {
+                    "jsonparse": {
+                      "version": "0.0.5",
+                      "from": "jsonparse@0.0.5",
+                      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz"
+                    }
+                  }
+                },
+                "detective": {
+                  "version": "3.1.0",
+                  "from": "detective@^3.1.0",
+                  "resolved": "https://registry.npmjs.org/detective/-/detective-3.1.0.tgz",
+                  "dependencies": {
+                    "escodegen": {
+                      "version": "1.1.0",
+                      "from": "escodegen@~1.1.0",
+                      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.1.0.tgz",
+                      "dependencies": {
+                        "esprima": {
+                          "version": "1.0.4",
+                          "from": "esprima@~1.0.4",
+                          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz"
+                        },
+                        "estraverse": {
+                          "version": "1.5.1",
+                          "from": "estraverse@~1.5.0",
+                          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz"
+                        },
+                        "esutils": {
+                          "version": "1.0.0",
+                          "from": "esutils@~1.0.0",
+                          "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz"
+                        },
+                        "source-map": {
+                          "version": "0.1.39",
+                          "from": "source-map@~0.1.7",
+                          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.39.tgz",
+                          "dependencies": {
+                            "amdefine": {
+                              "version": "0.1.0",
+                              "from": "amdefine@>=0.0.4",
+                              "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+                            }
+                          }
+                        }
+                      }
+                    },
+                    "esprima-fb": {
+                      "version": "3001.1.0-dev-harmony-fb",
+                      "from": "esprima-fb@3001.1.0-dev-harmony-fb",
+                      "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"
+                    }
+                  }
+                },
+                "minimist": {
+                  "version": "0.2.0",
+                  "from": "minimist@~0.2.0",
+                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz"
+                },
+                "parents": {
+                  "version": "1.0.0",
+                  "from": "parents@^1.0.0",
+                  "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.0.tgz",
+                  "dependencies": {
+                    "path-platform": {
+                      "version": "0.0.1",
+                      "from": "path-platform@^0.0.1",
+                      "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.0.1.tgz"
+                    }
+                  }
+                },
+                "stream-combiner2": {
+                  "version": "1.0.1",
+                  "from": "stream-combiner2@~1.0.0",
+                  "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.1.tgz",
+                  "dependencies": {
+                    "through2": {
+                      "version": "0.5.1",
+                      "from": "through2@~0.5.1",
+                      "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz"
+                    }
+                  }
+                },
+                "through2": {
+                  "version": "0.4.2",
+                  "from": "through2@~0.4.1",
+                  "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
+                  "dependencies": {
+                    "xtend": {
+                      "version": "2.1.2",
+                      "from": "xtend@~2.1.1",
+                      "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+                      "dependencies": {
+                        "object-keys": {
+                          "version": "0.4.0",
+                          "from": "object-keys@~0.4.0",
+                          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz"
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            },
+            "os-browserify": {
+              "version": "0.1.2",
+              "from": "os-browserify@~0.1.1",
+              "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz"
+            },
+            "parents": {
+              "version": "0.0.3",
+              "from": "parents@~0.0.1",
+              "resolved": "https://registry.npmjs.org/parents/-/parents-0.0.3.tgz",
+              "dependencies": {
+                "path-platform": {
+                  "version": "0.0.1",
+                  "from": "path-platform@^0.0.1",
+                  "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.0.1.tgz"
+                }
+              }
+            },
+            "path-browserify": {
+              "version": "0.0.0",
+              "from": "path-browserify@~0.0.0",
+              "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz"
+            },
+            "process": {
+              "version": "0.7.0",
+              "from": "process@^0.7.0",
+              "resolved": "https://registry.npmjs.org/process/-/process-0.7.0.tgz"
+            },
+            "punycode": {
+              "version": "1.2.4",
+              "from": "punycode@~1.2.3",
+              "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz"
+            },
+            "querystring-es3": {
+              "version": "0.2.1-0",
+              "from": "querystring-es3@~0.2.0",
+              "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1-0.tgz"
+            },
+            "readable-stream": {
+              "version": "1.0.31",
+              "from": "readable-stream@^1.0.27-1",
+              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz",
+              "dependencies": {
+                "core-util-is": {
+                  "version": "1.0.1",
+                  "from": "core-util-is@~1.0.0",
+                  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+                },
+                "string_decoder": {
+                  "version": "0.10.31",
+                  "from": "string_decoder@~0.10.x",
+                  "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+                }
+              }
+            },
+            "resolve": {
+              "version": "0.7.4",
+              "from": "resolve@~0.7.1",
+              "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz"
+            },
+            "shallow-copy": {
+              "version": "0.0.1",
+              "from": "shallow-copy@0.0.1",
+              "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz"
+            },
+            "shasum": {
+              "version": "1.0.0",
+              "from": "shasum@^1.0.0",
+              "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.0.tgz",
+              "dependencies": {
+                "json-stable-stringify": {
+                  "version": "0.0.1",
+                  "from": "json-stable-stringify@~0.0.0",
+                  "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
+                  "dependencies": {
+                    "jsonify": {
+                      "version": "0.0.0",
+                      "from": "jsonify@~0.0.0",
+                      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
+                    }
+                  }
+                }
+              }
+            },
+            "shell-quote": {
+              "version": "0.0.1",
+              "from": "shell-quote@~0.0.1",
+              "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz"
+            },
+            "stream-browserify": {
+              "version": "1.0.0",
+              "from": "stream-browserify@^1.0.0",
+              "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz"
+            },
+            "stream-combiner": {
+              "version": "0.0.4",
+              "from": "stream-combiner@~0.0.2",
+              "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
+              "dependencies": {
+                "duplexer": {
+                  "version": "0.1.1",
+                  "from": "duplexer@~0.1.1",
+                  "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz"
+                }
+              }
+            },
+            "string_decoder": {
+              "version": "0.0.1",
+              "from": "string_decoder@~0.0.0"
+            },
+            "subarg": {
+              "version": "0.0.1",
+              "from": "subarg@0.0.1",
+              "resolved": "https://registry.npmjs.org/subarg/-/subarg-0.0.1.tgz",
+              "dependencies": {
+                "minimist": {
+                  "version": "0.0.10",
+                  "from": "minimist@~0.0.7",
+                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz"
+                }
+              }
+            },
+            "syntax-error": {
+              "version": "1.1.1",
+              "from": "syntax-error@^1.1.1",
+              "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.1.1.tgz",
+              "dependencies": {
+                "esprima-fb": {
+                  "version": "3001.1.0-dev-harmony-fb",
+                  "from": "esprima-fb@3001.1.0-dev-harmony-fb",
+                  "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"
+                }
+              }
+            },
+            "through2": {
+              "version": "1.1.1",
+              "from": "through2@^1.0.0",
+              "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz",
+              "dependencies": {
+                "readable-stream": {
+                  "version": "1.1.13",
+                  "from": "readable-stream@>=1.1.13-1 <1.2.0-0",
+                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
+                  "dependencies": {
+                    "core-util-is": {
+                      "version": "1.0.1",
+                      "from": "core-util-is@~1.0.0",
+                      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
+                    },
+                    "string_decoder": {
+                      "version": "0.10.31",
+                      "from": "string_decoder@~0.10.x",
+                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
+                    }
+                  }
+                },
+                "xtend": {
+                  "version": "4.0.0",
+                  "from": "xtend@>=4.0.0 <4.1.0-0",
+                  "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz"
+                }
+              }
+            },
+            "timers-browserify": {
+              "version": "1.1.0",
+              "from": "timers-browserify@^1.0.1",
+              "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.1.0.tgz",
+              "dependencies": {
+                "process": {
+                  "version": "0.5.2",
+                  "from": "process@~0.5.1",
+                  "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz"
+                }
+              }
+            },
+            "tty-browserify": {
+              "version": "0.0.0",
+              "from": "tty-browserify@~0.0.0",
+              "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz"
+            },
+            "umd": {
+              "version": "2.1.0",
+              "from": "umd@~2.1.0",
+              "resolved": "https://registry.npmjs.org/umd/-/umd-2.1.0.tgz",
+              "dependencies": {
+                "rfile": {
+                  "version": "1.0.0",
+                  "from": "rfile@~1.0.0",
+                  "resolved": "https://registry.npmjs.org/rfile/-/rfile-1.0.0.tgz",
+                  "dependencies": {
+                    "callsite": {
+                      "version": "1.0.0",
+                      "from": "callsite@~1.0.0",
+                      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz"
+                    },
+                    "resolve": {
+                      "version": "0.3.1",
+                      "from": "resolve@~0.3.0",
+                      "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.3.1.tgz"
+                    }
+                  }
+                },
+                "ruglify": {
+                  "version": "1.0.0",
+                  "from": "ruglify@~1.0.0",
+                  "resolved": "https://registry.npmjs.org/ruglify/-/ruglify-1.0.0.tgz",
+                  "dependencies": {
+                    "uglify-js": {
+                      "version": "2.2.5",
+                      "from": "uglify-js@~2.2",
+                      "dependencies": {
+                        "source-map": {
+                          "version": "0.1.39",
+                          "from": "source-map@~0.1.7",
+                          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.39.tgz",
+                          "dependencies": {
+                            "amdefine": {
+                              "version": "0.1.0",
+                              "from": "amdefine@>=0.0.4",
+                              "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
+                            }
+                          }
+                        },
+                        "optimist": {
+                          "version": "0.3.7",
+                          "from": "optimist@~0.3.5",
+                          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+                          "dependencies": {
+                            "wordwrap": {
+                              "version": "0.0.2",
+                              "from": "wordwrap@~0.0.2",
+                              "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            },
+            "url": {
+              "version": "0.10.1",
+              "from": "url@~0.10.1",
+              "resolved": "https://registry.npmjs.org/url/-/url-0.10.1.tgz"
+            },
+            "util": {
+              "version": "0.10.3",
+              "from": "util@~0.10.1",
+              "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz"
+            },
+            "vm-browserify": {
+              "version": "0.0.4",
+              "from": "vm-browserify@~0.0.1",
+              "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+              "dependencies": {
+                "indexof": {
+                  "version": "0.0.1",
+                  "from": "indexof@0.0.1",
+                  "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz"
+                }
+              }
+            },
+            "xtend": {
+              "version": "3.0.0",
+              "from": "xtend@^3.0.0",
+              "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz"
+            }
+          }
+        },
+        "through": {
+          "version": "2.3.4",
+          "from": "through@2.3.4",
+          "resolved": "https://registry.npmjs.org/through/-/through-2.3.4.tgz"
+        },
+        "grunt-contrib-clean": {
+          "version": "0.4.1",
+          "from": "grunt-contrib-clean@~0.4.1"
+        },
+        "connect": {
+          "version": "1.8.5",
+          "from": "connect@1.8.5",
+          "resolved": "https://registry.npmjs.org/connect/-/connect-1.8.5.tgz",
+          "dependencies": {
+            "qs": {
+              "version": "0.6.6",
+              "from": "qs@>= 0.4.0"
+            },
+            "mime": {
+              "version": "1.2.11",
+              "from": "mime@>= 0.0.1"
+            },
+            "formidable": {
+              "version": "1.0.14",
+              "from": "formidable@1.0.x"
+            }
+          }
+        },
+        "grunt": {
+          "version": "0.4.4",
+          "from": "grunt@~0.4.1",
+          "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.4.tgz",
+          "dependencies": {
+            "async": {
+              "version": "0.1.22",
+              "from": "async@~0.1.22"
+            },
+            "coffee-script": {
+              "version": "1.3.3",
+              "from": "coffee-script@~1.3.3",
+              "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz"
+            },
+            "colors": {
+              "version": "0.6.2",
+              "from": "colors@~0.6.2"
+            },
+            "dateformat": {
+              "version": "1.0.2-1.2.3",
+              "from": "dateformat@1.0.2-1.2.3",
+              "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz"
+            },
+            "eventemitter2": {
+              "version": "0.4.13",
+              "from": "eventemitter2@~0.4.13"
+            },
+            "findup-sync": {
+              "version": "0.1.3",
+              "from": "findup-sync@~0.1.2",
+              "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
+              "dependencies": {
+                "glob": {
+                  "version": "3.2.9",
+                  "from": "glob@>= 3.1.4",
+                  "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.9.tgz",
+                  "dependencies": {
+                    "inherits": {
+                      "version": "2.0.1",
+                      "from": "inherits@2"
+                    }
+                  }
+                },
+                "lodash": {
+                  "version": "2.4.1",
+                  "from": "lodash@~2.4.1"
+                }
+              }
+            },
+            "glob": {
+              "version": "3.1.21",
+              "from": "glob@~3.1.21",
+              "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
+              "dependencies": {
+                "graceful-fs": {
+                  "version": "1.2.3",
+                  "from": "graceful-fs@~1.2.0"
+                },
+                "inherits": {
+                  "version": "1.0.0",
+                  "from": "inherits@1"
+                }
+              }
+            },
+            "hooker": {
+              "version": "0.2.3",
+              "from": "hooker@~0.2.3",
+              "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
+            },
+            "iconv-lite": {
+              "version": "0.2.11",
+              "from": "iconv-lite@~0.2.11",
+              "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz"
+            },
+            "minimatch": {
+              "version": "0.2.14",
+              "from": "minimatch@0.x.x",
+              "dependencies": {
+                "lru-cache": {
+                  "version": "2.5.0",
+                  "from": "lru-cache@2"
+                },
+                "sigmund": {
+                  "version": "1.0.0",
+                  "from": "sigmund@~1.0.0"
+                }
+              }
+            },
+            "nopt": {
+              "version": "1.0.10",
+              "from": "nopt@~1.0.10",
+              "dependencies": {
+                "abbrev": {
+                  "version": "1.0.4",
+                  "from": "abbrev@1"
+                }
+              }
+            },
+            "rimraf": {
+              "version": "2.2.6",
+              "from": "rimraf@~2.2.6",
+              "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz"
+            },
+            "lodash": {
+              "version": "0.9.2",
+              "from": "lodash@~0.9.2"
+            },
+            "underscore.string": {
+              "version": "2.2.1",
+              "from": "underscore.string@~2.2.1"
+            },
+            "which": {
+              "version": "1.0.5",
+              "from": "which@~1.0.5"
+            },
+            "js-yaml": {
+              "version": "2.0.5",
+              "from": "js-yaml@~2.0.5",
+              "dependencies": {
+                "argparse": {
+                  "version": "0.1.15",
+                  "from": "argparse@~ 0.1.11",
+                  "dependencies": {
+                    "underscore": {
+                      "version": "1.4.4",
+                      "from": "underscore@~1.4.3"
+                    },
+                    "underscore.string": {
+                      "version": "2.3.3",
+                      "from": "underscore.string@~2.3.1"
+                    }
+                  }
+                },
+                "esprima": {
+                  "version": "1.0.4",
+                  "from": "esprima@~ 1.0.2"
+                }
+              }
+            },
+            "exit": {
+              "version": "0.1.2",
+              "from": "exit@~0.1.1",
+              "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz"
+            },
+            "getobject": {
+              "version": "0.1.0",
+              "from": "getobject@~0.1.0",
+              "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz"
+            },
+            "grunt-legacy-util": {
+              "version": "0.1.2",
+              "from": "grunt-legacy-util@~0.1.2",
+              "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.1.2.tgz"
+            }
+          }
+        },
+        "grunt-contrib-jshint": {
+          "version": "0.6.5",
+          "from": "grunt-contrib-jshint@~0.6.0",
+          "dependencies": {
+            "jshint": {
+              "version": "2.1.11",
+              "from": "jshint@~2.1.10",
+              "dependencies": {
+                "shelljs": {
+                  "version": "0.1.4",
+                  "from": "shelljs@0.1.x",
+                  "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz"
+                },
+                "underscore": {
+                  "version": "1.4.4",
+                  "from": "underscore@1.4.x"
+                },
+                "cli": {
+                  "version": "0.4.5",
+                  "from": "cli@0.4.x",
+                  "dependencies": {
+                    "glob": {
+                      "version": "3.2.9",
+                      "from": "glob@>= 3.1.4",
+                      "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.9.tgz",
+                      "dependencies": {
+                        "inherits": {
+                          "version": "2.0.1",
+                          "from": "inherits@2"
+                        }
+                      }
+                    }
+                  }
+                },
+                "minimatch": {
+                  "version": "0.2.14",
+                  "from": "minimatch@0.x.x",
+                  "dependencies": {
+                    "lru-cache": {
+                      "version": "2.5.0",
+                      "from": "lru-cache@2",
+                      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+                    },
+                    "sigmund": {
+                      "version": "1.0.0",
+                      "from": "sigmund@~1.0.0"
+                    }
+                  }
+                },
+                "console-browserify": {
+                  "version": "0.1.6",
+                  "from": "console-browserify@0.1.x"
+                }
+              }
+            }
+          }
+        },
+        "jsdom-nogyp": {
+          "version": "0.8.3",
+          "from": "jsdom-nogyp@0.8.3",
+          "resolved": "https://registry.npmjs.org/jsdom-nogyp/-/jsdom-nogyp-0.8.3.tgz",
+          "dependencies": {
+            "htmlparser2": {
+              "version": "3.7.1",
+              "from": "htmlparser2@>= 3.1.5 <4",
+              "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.7.1.tgz",
+              "dependencies": {
+                "domhandler": {
+                  "version": "2.2.0",
+                  "from": "domhandler@2.2",
+                  "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.0.tgz"
+                },
+                "domutils": {
+                  "version": "1.4.1",
+                  "from": "domutils@1.4",
+                  "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.1.tgz"
+                },
+                "domelementtype": {
+                  "version": "1.1.1",
+                  "from": "domelementtype@1"
+                },
+                "readable-stream": {
+                  "version": "1.1.11",
+                  "from": "readable-stream@1.1",
+                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.11.tgz",
+                  "dependencies": {
+                    "core-util-is": {
+                      "version": "1.0.1",
+                      "from": "core-util-is@~1.0.0"
+                    },
+                    "string_decoder": {
+                      "version": "0.10.25-1",
+                      "from": "string_decoder@~0.10.x",
+                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.25-1.tgz"
+                    },
+                    "debuglog": {
+                      "version": "0.0.2",
+                      "from": "debuglog@0.0.2",
+                      "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-0.0.2.tgz"
+                    }
+                  }
+                },
+                "entities": {
+                  "version": "1.0.0",
+                  "from": "entities@1.0",
+                  "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz"
+                }
+              }
+            },
+            "nwmatcher": {
+              "version": "1.3.2",
+              "from": "nwmatcher@~1.3.1",
+              "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.2.tgz"
+            },
+            "request": {
+              "version": "2.34.0",
+              "from": "request@2.x",
+              "resolved": "https://registry.npmjs.org/request/-/request-2.34.0.tgz",
+              "dependencies": {
+                "qs": {
+                  "version": "0.6.6",
+                  "from": "qs@~0.6.0"
+                },
+                "json-stringify-safe": {
+                  "version": "5.0.0",
+                  "from": "json-stringify-safe@~5.0.0"
+                },
+                "forever-agent": {
+                  "version": "0.5.2",
+                  "from": "forever-agent@~0.5.0"
+                },
+                "node-uuid": {
+                  "version": "1.4.1",
+                  "from": "node-uuid@~1.4.0",
+                  "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz"
+                },
+                "mime": {
+                  "version": "1.2.11",
+                  "from": "mime@~1.2.9",
+                  "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
+                },
+                "tough-cookie": {
+                  "version": "0.12.1",
+                  "from": "tough-cookie@>=0.12.0",
+                  "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz",
+                  "dependencies": {
+                    "punycode": {
+                      "version": "1.2.4",
+                      "from": "punycode@>=0.2.0",
+                      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz"
+                    }
+                  }
+                },
+                "form-data": {
+                  "version": "0.1.2",
+                  "from": "form-data@~0.1.0",
+                  "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz",
+                  "dependencies": {
+                    "combined-stream": {
+                      "version": "0.0.4",
+                      "from": "combined-stream@~0.0.4",
+                      "dependencies": {
+                        "delayed-stream": {
+                          "version": "0.0.5",
+                          "from": "delayed-stream@0.0.5"
+                        }
+                      }
+                    },
+                    "async": {
+                      "version": "0.2.10",
+                      "from": "async@~0.2.9"
+                    }
+                  }
+                },
+                "tunnel-agent": {
+                  "version": "0.3.0",
+                  "from": "tunnel-agent@~0.3.0",
+                  "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz"
+                },
+                "http-signature": {
+                  "version": "0.10.0",
+                  "from": "http-signature@~0.10.0",
+                  "dependencies": {
+                    "assert-plus": {
+                      "version": "0.1.2",
+                      "from": "assert-plus@0.1.2",
+                      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
+                    },
+                    "asn1": {
+                      "version": "0.1.11",
+                      "from": "asn1@0.1.11",
+                      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
+                    },
+                    "ctype": {
+                      "version": "0.5.2",
+                      "from": "ctype@0.5.2",
+                      "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz"
+                    }
+                  }
+                },
+                "oauth-sign": {
+                  "version": "0.3.0",
+                  "from": "oauth-sign@~0.3.0",
+                  "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz"
+                },
+                "hawk": {
+                  "version": "1.0.0",
+                  "from": "hawk@~1.0.0",
+                  "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz",
+                  "dependencies": {
+                    "hoek": {
+                      "version": "0.9.1",
+                      "from": "hoek@0.9.x"
+                    },
+                    "boom": {
+                      "version": "0.4.2",
+                      "from": "boom@0.4.x",
+                      "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz"
+                    },
+                    "cryptiles": {
+                      "version": "0.2.2",
+                      "from": "cryptiles@0.2.x"
+                    },
+                    "sntp": {
+                      "version": "0.2.4",
+                      "from": "sntp@0.2.x",
+                      "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz"
+                    }
+                  }
+                },
+                "aws-sign2": {
+                  "version": "0.5.0",
+                  "from": "aws-sign2@~0.5.0",
+                  "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
+                }
+              }
+            },
+            "xmlhttprequest": {
+              "version": "1.6.0",
+              "from": "xmlhttprequest@>=1.5.0"
+            },
+            "cssom": {
+              "version": "0.2.5",
+              "from": "cssom@~0.2.5",
+              "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.2.5.tgz"
+            },
+            "cssstyle": {
+              "version": "0.2.11",
+              "from": "cssstyle@~0.2.3",
+              "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.11.tgz",
+              "dependencies": {
+                "cssom": {
+                  "version": "0.3.0",
+                  "from": "cssom@0.3.x",
+                  "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.0.tgz"
+                }
+              }
+            }
+          }
+        },
+        "jasmine-node": {
+          "version": "1.14.5",
+          "from": "jasmine-node@1.14.x",
+          "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-1.14.5.tgz",
+          "dependencies": {
+            "coffee-script": {
+              "version": "1.8.0",
+              "from": "coffee-script@>=1.0.1",
+              "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.8.0.tgz"
+            },
+            "jasmine-reporters": {
+              "version": "1.0.0",
+              "from": "jasmine-reporters@~1.0.0",
+              "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.0.tgz"
+            },
+            "jasmine-growl-reporter": {
+              "version": "0.0.3",
+              "from": "jasmine-growl-reporter@~0.0.2",
+              "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-0.0.3.tgz",
+              "dependencies": {
+                "growl": {
+                  "version": "1.7.0",
+                  "from": "growl@~1.7.0",
+                  "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz"
+                }
+              }
+            },
+            "requirejs": {
+              "version": "2.1.15",
+              "from": "requirejs@>=0.27.1",
+              "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.1.15.tgz"
+            },
+            "walkdir": {
+              "version": "0.0.7",
+              "from": "walkdir@>= 0.0.1",
+              "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.7.tgz"
+            },
+            "underscore": {
+              "version": "1.7.0",
+              "from": "underscore@>= 1.3.1",
+              "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz"
+            },
+            "gaze": {
+              "version": "0.3.4",
+              "from": "gaze@~0.3.2",
+              "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.3.4.tgz",
+              "dependencies": {
+                "minimatch": {
+                  "version": "0.2.14",
+                  "from": "minimatch@~0.2.9",
+                  "dependencies": {
+                    "lru-cache": {
+                      "version": "2.5.0",
+                      "from": "lru-cache@2",
+                      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+                    },
+                    "sigmund": {
+                      "version": "1.0.0",
+                      "from": "sigmund@~1.0.0",
+                      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+                    }
+                  }
+                },
+                "fileset": {
+                  "version": "0.1.5",
+                  "from": "fileset@~0.1.5",
+                  "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.1.5.tgz",
+                  "dependencies": {
+                    "glob": {
+                      "version": "3.2.11",
+                      "from": "glob@3.x",
+                      "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+                      "dependencies": {
+                        "inherits": {
+                          "version": "2.0.1",
+                          "from": "inherits@2",
+                          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+                        },
+                        "minimatch": {
+                          "version": "0.3.0",
+                          "from": "minimatch@0.3",
+                          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+                          "dependencies": {
+                            "lru-cache": {
+                              "version": "2.5.0",
+                              "from": "lru-cache@2",
+                              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+                            },
+                            "sigmund": {
+                              "version": "1.0.0",
+                              "from": "sigmund@~1.0.0",
+                              "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+                            }
+                          }
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            },
+            "mkdirp": {
+              "version": "0.3.5",
+              "from": "mkdirp@~0.3.5",
+              "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
+            }
+          }
+        }
+      }
+    },
+    "dep-graph": {
+      "version": "1.1.0",
+      "from": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz",
+      "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz",
+      "dependencies": {
+        "underscore": {
+          "version": "1.2.1",
+          "from": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz",
+          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz"
+        }
+      }
+    },
+    "elementtree": {
+      "version": "0.1.5",
+      "from": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.5.tgz",
+      "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.5.tgz",
+      "dependencies": {
+        "sax": {
+          "version": "0.3.5",
+          "from": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
+          "resolved": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz"
+        }
+      }
+    },
+    "glob": {
+      "version": "3.2.11",
+      "from": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "from": "inherits@2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+        },
+        "minimatch": {
+          "version": "0.3.0",
+          "from": "minimatch@0.3.0",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
+          "dependencies": {
+            "lru-cache": {
+              "version": "2.5.0",
+              "from": "lru-cache@2.5.0",
+              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
+            },
+            "sigmund": {
+              "version": "1.0.0",
+              "from": "sigmund@1.0.0",
+              "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+            }
+          }
+        }
+      }
+    },
+    "mime": {
+      "version": "1.2.11",
+      "from": "mime@1.2.11",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
+    },
+    "npm": {
+      "version": "1.3.4",
+      "from": "https://registry.npmjs.org/npm/-/npm-1.3.4.tgz",
+      "resolved": "https://registry.npmjs.org/npm/-/npm-1.3.4.tgz",
+      "dependencies": {
+        "semver": {
+          "version": "2.0.8",
+          "from": "semver@latest"
+        },
+        "ini": {
+          "version": "1.1.0",
+          "from": "ini@latest"
+        },
+        "slide": {
+          "version": "1.1.4",
+          "from": "slide@latest"
+        },
+        "abbrev": {
+          "version": "1.0.4",
+          "from": "abbrev@latest"
+        },
+        "graceful-fs": {
+          "version": "2.0.0",
+          "from": "graceful-fs@2"
+        },
+        "minimatch": {
+          "version": "0.2.12",
+          "from": "minimatch@latest",
+          "dependencies": {
+            "sigmund": {
+              "version": "1.0.0",
+              "from": "sigmund@~1.0.0",
+              "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
+            }
+          }
+        },
+        "nopt": {
+          "version": "2.1.1",
+          "from": "nopt@latest"
+        },
+        "rimraf": {
+          "version": "2.2.0",
+          "from": "rimraf@2.2"
+        },
+        "request": {
+          "version": "2.21.0",
+          "from": "request@latest",
+          "dependencies": {
+            "qs": {
+              "version": "0.6.5",
+              "from": "qs@~0.6.0"
+            },
+            "json-stringify-safe": {
+              "version": "4.0.0",
+              "from": "json-stringify-safe@~4.0.0"
+            },
+            "forever-agent": {
+              "version": "0.5.0",
+              "from": "forever-agent@~0.5.0"
+            },
+            "tunnel-agent": {
+              "version": "0.3.0",
+              "from": "tunnel-agent@~0.3.0"
+            },
+            "http-signature": {
+              "version": "0.9.11",
+              "from": "http-signature@~0.9.11",
+              "dependencies": {
+                "assert-plus": {
+                  "version": "0.1.2",
+                  "from": "assert-plus@0.1.2"
+                },
+                "asn1": {
+                  "version": "0.1.11",
+                  "from": "asn1@0.1.11"
+                },
+                "ctype": {
+                  "version": "0.5.2",
+                  "from": "ctype@0.5.2"
+                }
+              }
+            },
+            "hawk": {
+              "version": "0.13.1",
+              "from": "hawk@~0.13.0",
+              "dependencies": {
+                "hoek": {
+                  "version": "0.8.5",
+                  "from": "hoek@0.8.x"
+                },
+                "boom": {
+                  "version": "0.4.2",
+                  "from": "boom@0.4.x",
+                  "dependencies": {
+                    "hoek": {
+                      "version": "0.9.1",
+                      "from": "hoek@0.9.x",
+                      "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+                    }
+                  }
+                },
+                "cryptiles": {
+                  "version": "0.2.1",
+                  "from": "cryptiles@0.2.x"
+                },
+                "sntp": {
+                  "version": "0.2.4",
+                  "from": "sntp@0.2.x",
+                  "dependencies": {
+                    "hoek": {
+                      "version": "0.9.1",
+                      "from": "hoek@0.9.x",
+                      "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+                    }
+                  }
+                }
+              }
+            },
+            "aws-sign": {
+              "version": "0.3.0",
+              "from": "aws-sign@~0.3.0"
+            },
+            "oauth-sign": {
+              "version": "0.3.0",
+              "from": "oauth-sign@~0.3.0"
+            },
+            "cookie-jar": {
+              "version": "0.3.0",
+              "from": "cookie-jar@~0.3.0"
+            },
+            "node-uuid": {
+              "version": "1.4.0",
+              "from": "node-uuid@~1.4.0"
+            },
+            "mime": {
+              "version": "1.2.9",
+              "from": "mime@~1.2.9"
+            },
+            "form-data": {
+              "version": "0.0.8",
+              "from": "form-data@0.0.8",
+              "dependencies": {
+                "combined-stream": {
+                  "version": "0.0.4",
+                  "from": "combined-stream@~0.0.4",
+                  "dependencies": {
+                    "delayed-stream": {
+                      "version": "0.0.5",
+                      "from": "delayed-stream@0.0.5"
+                    }
+                  }
+                },
+                "async": {
+                  "version": "0.2.9",
+                  "from": "async@~0.2.7"
+                }
+              }
+            }
+          }
+        },
+        "which": {
+          "version": "1.0.5",
+          "from": "which@1"
+        },
+        "tar": {
+          "version": "0.1.17",
+          "from": "tar@0.1.17",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.17.tgz"
+        },
+        "fstream": {
+          "version": "0.1.23",
+          "from": "fstream@latest"
+        },
+        "block-stream": {
+          "version": "0.0.6",
+          "from": "block-stream@*"
+        },
+        "inherits": {
+          "version": "1.0.0",
+          "from": "git://github.com/isaacs/inherits"
+        },
+        "mkdirp": {
+          "version": "0.3.5",
+          "from": "mkdirp@0.3.5",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
+        },
+        "read": {
+          "version": "1.0.4",
+          "from": "read@~1.0.3",
+          "dependencies": {
+            "mute-stream": {
+              "version": "0.0.3",
+              "from": "mute-stream@~0.0.2"
+            }
+          }
+        },
+        "lru-cache": {
+          "version": "2.3.0",
+          "from": "lru-cache@latest"
+        },
+        "node-gyp": {
+          "version": "0.10.6",
+          "from": "node-gyp@latest"
+        },
+        "fstream-npm": {
+          "version": "0.1.4",
+          "from": "fstream-npm@latest",
+          "dependencies": {
+            "fstream-ignore": {
+              "version": "0.0.6",
+              "from": "fstream-ignore@~0.0.5"
+            }
+          }
+        },
+        "uid-number": {
+          "version": "0.0.3",
+          "from": "../uid-number"
+        },
+        "archy": {
+          "version": "0.0.2",
+          "from": "archy@0.0.2"
+        },
+        "chownr": {
+          "version": "0.0.1",
+          "from": "../chownr"
+        },
+        "npmlog": {
+          "version": "0.0.4",
+          "from": "npmlog@latest"
+        },
+        "ansi": {
+          "version": "0.1.2",
+          "from": "ansi@~0.1.2"
+        },
+        "npm-registry-client": {
+          "version": "0.2.27",
+          "from": "npm-registry-client@latest",
+          "dependencies": {
+            "couch-login": {
+              "version": "0.1.17",
+              "from": "couch-login@~0.1.15"
+            }
+          }
+        },
+        "read-package-json": {
+          "version": "1.1.0",
+          "from": "read-package-json@1",
+          "dependencies": {
+            "normalize-package-data": {
+              "version": "0.2.0",
+              "from": "normalize-package-data@~0.2",
+              "dependencies": {
+                "github-url-from-git": {
+                  "version": "1.1.1",
+                  "from": "github-url-from-git@~1.1.1"
+                }
+              }
+            }
+          }
+        },
+        "read-installed": {
+          "version": "0.2.2",
+          "from": "read-installed@latest"
+        },
+        "glob": {
+          "version": "3.2.3",
+          "from": "glob@latest",
+          "dependencies": {
+            "inherits": {
+              "version": "2.0.0",
+              "from": "inherits@2"
+            }
+          }
+        },
+        "init-package-json": {
+          "version": "0.0.10",
+          "from": "init-package-json@latest",
+          "dependencies": {
+            "promzard": {
+              "version": "0.2.0",
+              "from": "promzard@~0.2.0"
+            }
+          }
+        },
+        "osenv": {
+          "version": "0.0.3",
+          "from": "osenv@latest"
+        },
+        "lockfile": {
+          "version": "0.4.0",
+          "from": "lockfile@latest"
+        },
+        "retry": {
+          "version": "0.6.0",
+          "from": "retry"
+        },
+        "once": {
+          "version": "1.1.1",
+          "from": "once"
+        },
+        "npmconf": {
+          "version": "0.1.1",
+          "from": "npmconf@latest",
+          "dependencies": {
+            "config-chain": {
+              "version": "1.1.7",
+              "from": "config-chain@~1.1.1",
+              "dependencies": {
+                "proto-list": {
+                  "version": "1.2.2",
+                  "from": "proto-list@~1.2.1"
+                }
+              }
+            }
+          }
+        },
+        "opener": {
+          "version": "1.3.0",
+          "from": "opener@latest"
+        },
+        "chmodr": {
+          "version": "0.1.0",
+          "from": "chmodr@latest"
+        },
+        "cmd-shim": {
+          "version": "1.1.0",
+          "from": "cmd-shim@"
+        },
+        "sha": {
+          "version": "1.0.1",
+          "from": "sha@~1.0.1"
+        },
+        "editor": {
+          "version": "0.0.4",
+          "from": "editor@"
+        },
+        "child-process-close": {
+          "version": "0.1.1",
+          "from": "child-process-close@",
+          "resolved": "https://registry.npmjs.org/child-process-close/-/child-process-close-0.1.1.tgz"
+        },
+        "npm-user-validate": {
+          "version": "0.0.3",
+          "from": "npm-user-validate@0.0.3",
+          "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.0.3.tgz"
+        }
+      }
+    },
+    "npmconf": {
+      "version": "0.1.16",
+      "from": "npmconf@0.1.16",
+      "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-0.1.16.tgz",
+      "dependencies": {
+        "config-chain": {
+          "version": "1.1.8",
+          "from": "config-chain@1.1.8",
+          "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz",
+          "dependencies": {
+            "proto-list": {
+              "version": "1.2.3",
+              "from": "proto-list@1.2.3",
+              "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz"
+            }
+          }
+        },
+        "inherits": {
+          "version": "2.0.1",
+          "from": "inherits@2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+        },
+        "once": {
+          "version": "1.3.0",
+          "from": "once@1.3.0",
+          "resolved": "https://registry.npmjs.org/once/-/once-1.3.0.tgz"
+        },
+        "mkdirp": {
+          "version": "0.3.5",
+          "from": "mkdirp@~0.3.5",
+          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
+        },
+        "nopt": {
+          "version": "2.2.1",
+          "from": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz",
+          "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz",
+          "dependencies": {
+            "abbrev": {
+              "version": "1.0.5",
+              "from": "abbrev@1.0.5",
+              "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
+            }
+          }
+        },
+        "ini": {
+          "version": "1.1.0",
+          "from": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz"
+        }
+      }
+    },
+    "osenv": {
+      "version": "0.0.3",
+      "from": "osenv@0.0.3",
+      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz"
+    },
+    "plist": {
+      "version": "1.0.1",
+      "from": "plist@1.0.1",
+      "resolved": "https://registry.npmjs.org/plist/-/plist-1.0.1.tgz",
+      "dependencies": {
+        "base64-js": {
+          "version": "0.0.6",
+          "from": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.6.tgz",
+          "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.6.tgz"
+        },
+        "xmlbuilder": {
+          "version": "2.2.1",
+          "from": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.2.1.tgz",
+          "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.2.1.tgz",
+          "dependencies": {
+            "lodash-node": {
+              "version": "2.4.1",
+              "from": "lodash-node@2.4.1",
+              "resolved": "https://registry.npmjs.org/lodash-node/-/lodash-node-2.4.1.tgz"
+            }
+          }
+        },
+        "xmldom": {
+          "version": "0.1.19",
+          "from": "xmldom@0.1.19",
+          "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz"
+        },
+        "util-deprecate": {
+          "version": "1.0.0",
+          "from": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.0.tgz"
+        }
+      }
+    },
+    "properties-parser": {
+      "version": "0.2.3",
+      "from": "properties-parser@0.2.3",
+      "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.2.3.tgz"
+    },
+    "q": {
+      "version": "0.9.7",
+      "from": "q@0.9.7",
+      "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz"
+    },
+    "rc": {
+      "version": "0.3.0",
+      "from": "https://registry.npmjs.org/rc/-/rc-0.3.0.tgz",
+      "resolved": "https://registry.npmjs.org/rc/-/rc-0.3.0.tgz",
+      "dependencies": {
+        "optimist": {
+          "version": "0.3.7",
+          "from": "optimist@0.3.7",
+          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+          "dependencies": {
+            "wordwrap": {
+              "version": "0.0.2",
+              "from": "wordwrap@0.0.2",
+              "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
+            }
+          }
+        },
+        "deep-extend": {
+          "version": "0.2.11",
+          "from": "deep-extend@0.2.11",
+          "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz"
+        },
+        "ini": {
+          "version": "1.1.0",
+          "from": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz",
+          "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz"
+        }
+      }
+    },
+    "request": {
+      "version": "2.22.0",
+      "from": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
+      "dependencies": {
+        "qs": {
+          "version": "0.6.6",
+          "from": "qs@0.6.6",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz"
+        },
+        "json-stringify-safe": {
+          "version": "4.0.0",
+          "from": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz",
+          "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz"
+        },
+        "forever-agent": {
+          "version": "0.5.2",
+          "from": "forever-agent@0.5.2",
+          "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
+        },
+        "tunnel-agent": {
+          "version": "0.3.0",
+          "from": "tunnel-agent@0.3.0",
+          "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz"
+        },
+        "http-signature": {
+          "version": "0.10.0",
+          "from": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz",
+          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz",
+          "dependencies": {
+            "assert-plus": {
+              "version": "0.1.2",
+              "from": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz",
+              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
+            },
+            "asn1": {
+              "version": "0.1.11",
+              "from": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
+              "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
+            },
+            "ctype": {
+              "version": "0.5.2",
+              "from": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz",
+              "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz"
+            }
+          }
+        },
+        "hawk": {
+          "version": "0.13.1",
+          "from": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
+          "resolved": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
+          "dependencies": {
+            "hoek": {
+              "version": "0.8.5",
+              "from": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz",
+              "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz"
+            },
+            "boom": {
+              "version": "0.4.2",
+              "from": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
+              "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
+              "dependencies": {
+                "hoek": {
+                  "version": "0.9.1",
+                  "from": "hoek@0.9.1",
+                  "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+                }
+              }
+            },
+            "cryptiles": {
+              "version": "0.2.2",
+              "from": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
+              "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz"
+            },
+            "sntp": {
+              "version": "0.2.4",
+              "from": "sntp@0.2.4",
+              "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
+              "dependencies": {
+                "hoek": {
+                  "version": "0.9.1",
+                  "from": "hoek@0.9.1",
+                  "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
+                }
+              }
+            }
+          }
+        },
+        "aws-sign": {
+          "version": "0.3.0",
+          "from": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz"
+        },
+        "oauth-sign": {
+          "version": "0.3.0",
+          "from": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz"
+        },
+        "cookie-jar": {
+          "version": "0.3.0",
+          "from": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz",
+          "resolved": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz"
+        },
+        "node-uuid": {
+          "version": "1.4.1",
+          "from": "node-uuid@1.4.1",
+          "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz"
+        },
+        "form-data": {
+          "version": "0.0.8",
+          "from": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
+          "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
+          "dependencies": {
+            "combined-stream": {
+              "version": "0.0.5",
+              "from": "combined-stream@0.0.5",
+              "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz",
+              "dependencies": {
+                "delayed-stream": {
+                  "version": "0.0.5",
+                  "from": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
+                  "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
+                }
+              }
+            },
+            "async": {
+              "version": "0.2.10",
+              "from": "async@0.2.10",
+              "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
+            }
+          }
+        }
+      }
+    },
+    "semver": {
+      "version": "2.0.11",
+      "from": "https://registry.npmjs.org/semver/-/semver-2.0.11.tgz",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-2.0.11.tgz"
+    },
+    "shelljs": {
+      "version": "0.1.4",
+      "from": "shelljs@0.1.4"
+    },
+    "tar": {
+      "version": "0.1.20",
+      "from": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz",
+      "dependencies": {
+        "block-stream": {
+          "version": "0.0.7",
+          "from": "block-stream@0.0.7",
+          "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz"
+        },
+        "fstream": {
+          "version": "0.1.31",
+          "from": "fstream@0.1.31",
+          "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz",
+          "dependencies": {
+            "graceful-fs": {
+              "version": "3.0.2",
+              "from": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz",
+              "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz"
+            },
+            "mkdirp": {
+              "version": "0.5.0",
+              "from": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+              "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
+              "dependencies": {
+                "minimist": {
+                  "version": "0.0.8",
+                  "from": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
+                }
+              }
+            },
+            "rimraf": {
+              "version": "2.2.8",
+              "from": "rimraf@2.2.8"
+            }
+          }
+        },
+        "inherits": {
+          "version": "2.0.1",
+          "from": "inherits@2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
+        }
+      }
+    },
+    "underscore": {
+      "version": "1.4.4",
+      "from": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz"
+    },
+    "unorm": {
+      "version": "1.3.3",
+      "from": "unorm@1.3.3",
+      "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.3.3.tgz"
+    },
+    "xcode": {
+      "version": "0.6.7",
+      "from": "https://registry.npmjs.org/xcode/-/xcode-0.6.7.tgz",
+      "resolved": "https://registry.npmjs.org/xcode/-/xcode-0.6.7.tgz",
+      "dependencies": {
+        "pegjs": {
+          "version": "0.6.2",
+          "from": "https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz",
+          "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz"
+        },
+        "node-uuid": {
+          "version": "1.3.3",
+          "from": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz",
+          "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz"
+        }
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/c92cf55d/cordova-lib/package.json
----------------------------------------------------------------------
diff --git a/cordova-lib/package.json b/cordova-lib/package.json
index fa550a8..557ac3f 100644
--- a/cordova-lib/package.json
+++ b/cordova-lib/package.json
@@ -2,7 +2,7 @@
   "author": "Apache Software Foundation",
   "name": "cordova-lib",
   "description": "Apache Cordova tools core lib and API",
-  "version": "0.21.11",
+  "version": "0.21.12",
   "repository": {
     "type": "git",
     "url": "git://git-wip-us.apache.org/repos/asf/cordova-lib.git"
@@ -35,7 +35,7 @@
     "tar": "0.1.x",
     "underscore": "1.4.4",
     "xcode": "0.6.7",
-    "cordova-js": "3.6.3",
+    "cordova-js": "3.6.4",
     "unorm": ">=1.3"
   },
   "devDependencies": {


[5/6] git commit: CB-7383 Updated version and RELEASENOTES.md for release 0.21.13

Posted by st...@apache.org.
CB-7383 Updated version and RELEASENOTES.md for release 0.21.13


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

Branch: refs/heads/master
Commit: 6e04c26bcd0487cfbbcbd874307bd05ff206ef26
Parents: c92cf55
Author: Marcel Kinard <cm...@gmail.com>
Authored: Thu Sep 18 16:02:19 2014 -0400
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Sep 22 15:03:46 2014 -0700

----------------------------------------------------------------------
 cordova-lib/RELEASENOTES.md     |    9 +
 cordova-lib/npm-shrinkwrap.json | 2136 ----------------------------------
 cordova-lib/package.json        |    2 +-
 3 files changed, 10 insertions(+), 2137 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/6e04c26b/cordova-lib/RELEASENOTES.md
----------------------------------------------------------------------
diff --git a/cordova-lib/RELEASENOTES.md b/cordova-lib/RELEASENOTES.md
index 7beae1c..c94e37b 100644
--- a/cordova-lib/RELEASENOTES.md
+++ b/cordova-lib/RELEASENOTES.md
@@ -20,6 +20,15 @@
 -->
 # Cordova-lib Release Notes
 
+### 0.21.13
+* remove shrinkwrap
+
+### 0.21.12
+* CB-7383: depend on a newer version of cordova-js, bump self version
+
+### 0.21.11
+* bump version numbers of platforms to 3.6.3
+
 ### 0.21.10 (Sep 05, 2014)
 * CB-7457 - cordova plugin add --searchpath does not recurse through subfolders when a plugin.xml is malformed in one of them
 * CB-7457 - Add malformed plugin for tests

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/6e04c26b/cordova-lib/npm-shrinkwrap.json
----------------------------------------------------------------------
diff --git a/cordova-lib/npm-shrinkwrap.json b/cordova-lib/npm-shrinkwrap.json
deleted file mode 100644
index 0e03299..0000000
--- a/cordova-lib/npm-shrinkwrap.json
+++ /dev/null
@@ -1,2136 +0,0 @@
-{
-  "name": "cordova-lib",
-  "version": "0.21.12",
-  "dependencies": {
-    "bplist-parser": {
-      "version": "0.0.5",
-      "from": "bplist-parser@0.0.5",
-      "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.5.tgz"
-    },
-    "cordova-js": {
-      "version": "3.6.4",
-      "dependencies": {
-        "uglify-js": {
-          "version": "2.4.13",
-          "from": "uglify-js@2.4.x",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.13.tgz",
-          "dependencies": {
-            "async": {
-              "version": "0.2.10",
-              "from": "async@~0.2.6"
-            },
-            "source-map": {
-              "version": "0.1.33",
-              "from": "source-map@~0.1.33",
-              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.33.tgz",
-              "dependencies": {
-                "amdefine": {
-                  "version": "0.1.0",
-                  "from": "amdefine@>=0.0.4"
-                }
-              }
-            },
-            "optimist": {
-              "version": "0.3.7",
-              "from": "optimist@~0.3.5",
-              "dependencies": {
-                "wordwrap": {
-                  "version": "0.0.2",
-                  "from": "wordwrap@~0.0.2"
-                }
-              }
-            },
-            "uglify-to-browserify": {
-              "version": "1.0.2",
-              "from": "uglify-to-browserify@~1.0.0",
-              "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz"
-            }
-          }
-        },
-        "browserify": {
-          "version": "5.11.2",
-          "from": "browserify@5.11.2",
-          "resolved": "https://registry.npmjs.org/browserify/-/browserify-5.11.2.tgz",
-          "dependencies": {
-            "JSONStream": {
-              "version": "0.8.4",
-              "from": "JSONStream@~0.8.3",
-              "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz",
-              "dependencies": {
-                "jsonparse": {
-                  "version": "0.0.5",
-                  "from": "jsonparse@0.0.5",
-                  "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz"
-                }
-              }
-            },
-            "assert": {
-              "version": "1.1.2",
-              "from": "assert@~1.1.0",
-              "resolved": "https://registry.npmjs.org/assert/-/assert-1.1.2.tgz"
-            },
-            "browser-pack": {
-              "version": "3.1.1",
-              "from": "browser-pack@^3.0.0",
-              "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-3.1.1.tgz",
-              "dependencies": {
-                "combine-source-map": {
-                  "version": "0.3.0",
-                  "from": "combine-source-map@~0.3.0",
-                  "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.3.0.tgz",
-                  "dependencies": {
-                    "inline-source-map": {
-                      "version": "0.3.0",
-                      "from": "inline-source-map@~0.3.0",
-                      "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.3.0.tgz"
-                    },
-                    "convert-source-map": {
-                      "version": "0.3.5",
-                      "from": "convert-source-map@~0.3.0",
-                      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz"
-                    },
-                    "source-map": {
-                      "version": "0.1.39",
-                      "from": "source-map@~0.1.31",
-                      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.39.tgz",
-                      "dependencies": {
-                        "amdefine": {
-                          "version": "0.1.0",
-                          "from": "amdefine@>=0.0.4",
-                          "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
-                        }
-                      }
-                    }
-                  }
-                },
-                "through2": {
-                  "version": "0.5.1",
-                  "from": "through2@~0.5.1",
-                  "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz"
-                }
-              }
-            },
-            "browser-resolve": {
-              "version": "1.3.2",
-              "from": "browser-resolve@^1.3.0",
-              "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.3.2.tgz"
-            },
-            "browserify-zlib": {
-              "version": "0.1.4",
-              "from": "browserify-zlib@~0.1.2",
-              "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
-              "dependencies": {
-                "pako": {
-                  "version": "0.2.5",
-                  "from": "pako@~0.2.0",
-                  "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.5.tgz"
-                }
-              }
-            },
-            "buffer": {
-              "version": "2.7.0",
-              "from": "buffer@^2.3.0",
-              "resolved": "https://registry.npmjs.org/buffer/-/buffer-2.7.0.tgz",
-              "dependencies": {
-                "base64-js": {
-                  "version": "0.0.7",
-                  "from": "base64-js@0.0.7",
-                  "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.7.tgz"
-                },
-                "ieee754": {
-                  "version": "1.1.4",
-                  "from": "ieee754@^1.1.4",
-                  "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.4.tgz"
-                },
-                "is-array": {
-                  "version": "1.0.1",
-                  "from": "is-array@^1.0.1",
-                  "resolved": "https://registry.npmjs.org/is-array/-/is-array-1.0.1.tgz"
-                }
-              }
-            },
-            "builtins": {
-              "version": "0.0.7",
-              "from": "builtins@~0.0.3",
-              "resolved": "https://registry.npmjs.org/builtins/-/builtins-0.0.7.tgz"
-            },
-            "commondir": {
-              "version": "0.0.1",
-              "from": "commondir@0.0.1",
-              "resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz"
-            },
-            "concat-stream": {
-              "version": "1.4.6",
-              "from": "concat-stream@~1.4.1",
-              "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.4.6.tgz",
-              "dependencies": {
-                "typedarray": {
-                  "version": "0.0.6",
-                  "from": "typedarray@~0.0.5",
-                  "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
-                },
-                "readable-stream": {
-                  "version": "1.1.13",
-                  "from": "readable-stream@~1.1.9",
-                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
-                  "dependencies": {
-                    "core-util-is": {
-                      "version": "1.0.1",
-                      "from": "core-util-is@~1.0.0",
-                      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
-                    },
-                    "string_decoder": {
-                      "version": "0.10.31",
-                      "from": "string_decoder@~0.10.x",
-                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
-                    }
-                  }
-                }
-              }
-            },
-            "console-browserify": {
-              "version": "1.1.0",
-              "from": "console-browserify@^1.1.0",
-              "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
-              "dependencies": {
-                "date-now": {
-                  "version": "0.1.4",
-                  "from": "date-now@^0.1.4",
-                  "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz"
-                }
-              }
-            },
-            "constants-browserify": {
-              "version": "0.0.1",
-              "from": "constants-browserify@~0.0.1",
-              "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-0.0.1.tgz"
-            },
-            "crypto-browserify": {
-              "version": "3.0.2",
-              "from": "crypto-browserify@^3.0.0",
-              "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.0.2.tgz",
-              "dependencies": {
-                "ripemd160": {
-                  "version": "0.2.0",
-                  "from": "ripemd160@0.2.0",
-                  "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-0.2.0.tgz"
-                },
-                "sha.js": {
-                  "version": "2.1.8",
-                  "from": "sha.js@2.1.8",
-                  "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.1.8.tgz",
-                  "dependencies": {
-                    "buffer": {
-                      "version": "2.3.4",
-                      "from": "buffer@~2.3.2",
-                      "resolved": "https://registry.npmjs.org/buffer/-/buffer-2.3.4.tgz",
-                      "dependencies": {
-                        "base64-js": {
-                          "version": "0.0.7",
-                          "from": "base64-js@~0.0.4",
-                          "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.7.tgz"
-                        },
-                        "ieee754": {
-                          "version": "1.1.4",
-                          "from": "ieee754@~1.1.1",
-                          "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.4.tgz"
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "deep-equal": {
-              "version": "0.2.1",
-              "from": "deep-equal@~0.2.1"
-            },
-            "defined": {
-              "version": "0.0.0",
-              "from": "defined@~0.0.0",
-              "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz"
-            },
-            "deps-sort": {
-              "version": "1.3.5",
-              "from": "deps-sort@^1.3.5",
-              "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-1.3.5.tgz",
-              "dependencies": {
-                "minimist": {
-                  "version": "0.2.0",
-                  "from": "minimist@~0.2.0",
-                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz"
-                },
-                "through2": {
-                  "version": "0.5.1",
-                  "from": "through2@~0.5.1",
-                  "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz"
-                }
-              }
-            },
-            "domain-browser": {
-              "version": "1.1.2",
-              "from": "domain-browser@~1.1.0",
-              "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.2.tgz"
-            },
-            "duplexer2": {
-              "version": "0.0.2",
-              "from": "duplexer2@~0.0.2",
-              "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
-              "dependencies": {
-                "readable-stream": {
-                  "version": "1.1.13",
-                  "from": "readable-stream@~1.1.9",
-                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
-                  "dependencies": {
-                    "core-util-is": {
-                      "version": "1.0.1",
-                      "from": "core-util-is@~1.0.0",
-                      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
-                    },
-                    "string_decoder": {
-                      "version": "0.10.31",
-                      "from": "string_decoder@~0.10.x",
-                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
-                    }
-                  }
-                }
-              }
-            },
-            "events": {
-              "version": "1.0.2",
-              "from": "events@~1.0.0",
-              "resolved": "https://registry.npmjs.org/events/-/events-1.0.2.tgz"
-            },
-            "glob": {
-              "version": "4.0.5",
-              "from": "glob@^4.0.5",
-              "resolved": "https://registry.npmjs.org/glob/-/glob-4.0.5.tgz",
-              "dependencies": {
-                "minimatch": {
-                  "version": "1.0.0",
-                  "from": "minimatch@^1.0.0",
-                  "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-1.0.0.tgz",
-                  "dependencies": {
-                    "lru-cache": {
-                      "version": "2.5.0",
-                      "from": "lru-cache@2",
-                      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
-                    },
-                    "sigmund": {
-                      "version": "1.0.0",
-                      "from": "sigmund@~1.0.0",
-                      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
-                    }
-                  }
-                },
-                "once": {
-                  "version": "1.3.0",
-                  "from": "once@^1.3.0",
-                  "resolved": "https://registry.npmjs.org/once/-/once-1.3.0.tgz"
-                },
-                "graceful-fs": {
-                  "version": "3.0.2",
-                  "from": "graceful-fs@^3.0.2",
-                  "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz"
-                }
-              }
-            },
-            "http-browserify": {
-              "version": "1.6.0",
-              "from": "http-browserify@^1.4.0",
-              "resolved": "https://registry.npmjs.org/http-browserify/-/http-browserify-1.6.0.tgz",
-              "dependencies": {
-                "Base64": {
-                  "version": "0.2.1",
-                  "from": "Base64@~0.2.0",
-                  "resolved": "https://registry.npmjs.org/Base64/-/Base64-0.2.1.tgz"
-                }
-              }
-            },
-            "https-browserify": {
-              "version": "0.0.0",
-              "from": "https-browserify@~0.0.0",
-              "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.0.tgz"
-            },
-            "inherits": {
-              "version": "2.0.1",
-              "from": "inherits@~2.0.1",
-              "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
-            },
-            "insert-module-globals": {
-              "version": "6.1.0",
-              "from": "insert-module-globals@^6.1.0",
-              "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-6.1.0.tgz",
-              "dependencies": {
-                "JSONStream": {
-                  "version": "0.7.4",
-                  "from": "JSONStream@~0.7.1",
-                  "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.7.4.tgz",
-                  "dependencies": {
-                    "jsonparse": {
-                      "version": "0.0.5",
-                      "from": "jsonparse@0.0.5",
-                      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz"
-                    }
-                  }
-                },
-                "lexical-scope": {
-                  "version": "1.1.0",
-                  "from": "lexical-scope@~1.1.0",
-                  "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.1.0.tgz",
-                  "dependencies": {
-                    "astw": {
-                      "version": "1.1.0",
-                      "from": "astw@~1.1.0",
-                      "resolved": "https://registry.npmjs.org/astw/-/astw-1.1.0.tgz",
-                      "dependencies": {
-                        "esprima-fb": {
-                          "version": "3001.1.0-dev-harmony-fb",
-                          "from": "esprima-fb@3001.1.0-dev-harmony-fb",
-                          "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"
-                        }
-                      }
-                    }
-                  }
-                },
-                "process": {
-                  "version": "0.6.0",
-                  "from": "process@~0.6.0",
-                  "resolved": "https://registry.npmjs.org/process/-/process-0.6.0.tgz"
-                }
-              }
-            },
-            "isarray": {
-              "version": "0.0.1",
-              "from": "isarray@0.0.1",
-              "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
-            },
-            "labeled-stream-splicer": {
-              "version": "1.0.0",
-              "from": "labeled-stream-splicer@^1.0.0",
-              "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.0.tgz",
-              "dependencies": {
-                "stream-splicer": {
-                  "version": "1.3.0",
-                  "from": "stream-splicer@^1.1.0",
-                  "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-1.3.0.tgz",
-                  "dependencies": {
-                    "readable-stream": {
-                      "version": "1.1.13",
-                      "from": "readable-stream@^1.1.13-1",
-                      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
-                      "dependencies": {
-                        "core-util-is": {
-                          "version": "1.0.1",
-                          "from": "core-util-is@~1.0.0",
-                          "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
-                        },
-                        "string_decoder": {
-                          "version": "0.10.31",
-                          "from": "string_decoder@~0.10.x",
-                          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
-                        }
-                      }
-                    },
-                    "readable-wrap": {
-                      "version": "1.0.0",
-                      "from": "readable-wrap@^1.0.0",
-                      "resolved": "https://registry.npmjs.org/readable-wrap/-/readable-wrap-1.0.0.tgz"
-                    },
-                    "indexof": {
-                      "version": "0.0.1",
-                      "from": "indexof@0.0.1",
-                      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz"
-                    }
-                  }
-                }
-              }
-            },
-            "module-deps": {
-              "version": "3.5.5",
-              "from": "module-deps@^3.5.0",
-              "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-3.5.5.tgz",
-              "dependencies": {
-                "JSONStream": {
-                  "version": "0.7.4",
-                  "from": "JSONStream@~0.7.1",
-                  "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.7.4.tgz",
-                  "dependencies": {
-                    "jsonparse": {
-                      "version": "0.0.5",
-                      "from": "jsonparse@0.0.5",
-                      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz"
-                    }
-                  }
-                },
-                "detective": {
-                  "version": "3.1.0",
-                  "from": "detective@^3.1.0",
-                  "resolved": "https://registry.npmjs.org/detective/-/detective-3.1.0.tgz",
-                  "dependencies": {
-                    "escodegen": {
-                      "version": "1.1.0",
-                      "from": "escodegen@~1.1.0",
-                      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.1.0.tgz",
-                      "dependencies": {
-                        "esprima": {
-                          "version": "1.0.4",
-                          "from": "esprima@~1.0.4",
-                          "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz"
-                        },
-                        "estraverse": {
-                          "version": "1.5.1",
-                          "from": "estraverse@~1.5.0",
-                          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz"
-                        },
-                        "esutils": {
-                          "version": "1.0.0",
-                          "from": "esutils@~1.0.0",
-                          "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz"
-                        },
-                        "source-map": {
-                          "version": "0.1.39",
-                          "from": "source-map@~0.1.7",
-                          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.39.tgz",
-                          "dependencies": {
-                            "amdefine": {
-                              "version": "0.1.0",
-                              "from": "amdefine@>=0.0.4",
-                              "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
-                            }
-                          }
-                        }
-                      }
-                    },
-                    "esprima-fb": {
-                      "version": "3001.1.0-dev-harmony-fb",
-                      "from": "esprima-fb@3001.1.0-dev-harmony-fb",
-                      "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"
-                    }
-                  }
-                },
-                "minimist": {
-                  "version": "0.2.0",
-                  "from": "minimist@~0.2.0",
-                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz"
-                },
-                "parents": {
-                  "version": "1.0.0",
-                  "from": "parents@^1.0.0",
-                  "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.0.tgz",
-                  "dependencies": {
-                    "path-platform": {
-                      "version": "0.0.1",
-                      "from": "path-platform@^0.0.1",
-                      "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.0.1.tgz"
-                    }
-                  }
-                },
-                "stream-combiner2": {
-                  "version": "1.0.1",
-                  "from": "stream-combiner2@~1.0.0",
-                  "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.0.1.tgz",
-                  "dependencies": {
-                    "through2": {
-                      "version": "0.5.1",
-                      "from": "through2@~0.5.1",
-                      "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz"
-                    }
-                  }
-                },
-                "through2": {
-                  "version": "0.4.2",
-                  "from": "through2@~0.4.1",
-                  "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",
-                  "dependencies": {
-                    "xtend": {
-                      "version": "2.1.2",
-                      "from": "xtend@~2.1.1",
-                      "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
-                      "dependencies": {
-                        "object-keys": {
-                          "version": "0.4.0",
-                          "from": "object-keys@~0.4.0",
-                          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz"
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "os-browserify": {
-              "version": "0.1.2",
-              "from": "os-browserify@~0.1.1",
-              "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.1.2.tgz"
-            },
-            "parents": {
-              "version": "0.0.3",
-              "from": "parents@~0.0.1",
-              "resolved": "https://registry.npmjs.org/parents/-/parents-0.0.3.tgz",
-              "dependencies": {
-                "path-platform": {
-                  "version": "0.0.1",
-                  "from": "path-platform@^0.0.1",
-                  "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.0.1.tgz"
-                }
-              }
-            },
-            "path-browserify": {
-              "version": "0.0.0",
-              "from": "path-browserify@~0.0.0",
-              "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz"
-            },
-            "process": {
-              "version": "0.7.0",
-              "from": "process@^0.7.0",
-              "resolved": "https://registry.npmjs.org/process/-/process-0.7.0.tgz"
-            },
-            "punycode": {
-              "version": "1.2.4",
-              "from": "punycode@~1.2.3",
-              "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz"
-            },
-            "querystring-es3": {
-              "version": "0.2.1-0",
-              "from": "querystring-es3@~0.2.0",
-              "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1-0.tgz"
-            },
-            "readable-stream": {
-              "version": "1.0.31",
-              "from": "readable-stream@^1.0.27-1",
-              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.31.tgz",
-              "dependencies": {
-                "core-util-is": {
-                  "version": "1.0.1",
-                  "from": "core-util-is@~1.0.0",
-                  "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
-                },
-                "string_decoder": {
-                  "version": "0.10.31",
-                  "from": "string_decoder@~0.10.x",
-                  "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
-                }
-              }
-            },
-            "resolve": {
-              "version": "0.7.4",
-              "from": "resolve@~0.7.1",
-              "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.7.4.tgz"
-            },
-            "shallow-copy": {
-              "version": "0.0.1",
-              "from": "shallow-copy@0.0.1",
-              "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz"
-            },
-            "shasum": {
-              "version": "1.0.0",
-              "from": "shasum@^1.0.0",
-              "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.0.tgz",
-              "dependencies": {
-                "json-stable-stringify": {
-                  "version": "0.0.1",
-                  "from": "json-stable-stringify@~0.0.0",
-                  "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz",
-                  "dependencies": {
-                    "jsonify": {
-                      "version": "0.0.0",
-                      "from": "jsonify@~0.0.0",
-                      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz"
-                    }
-                  }
-                }
-              }
-            },
-            "shell-quote": {
-              "version": "0.0.1",
-              "from": "shell-quote@~0.0.1",
-              "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-0.0.1.tgz"
-            },
-            "stream-browserify": {
-              "version": "1.0.0",
-              "from": "stream-browserify@^1.0.0",
-              "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-1.0.0.tgz"
-            },
-            "stream-combiner": {
-              "version": "0.0.4",
-              "from": "stream-combiner@~0.0.2",
-              "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
-              "dependencies": {
-                "duplexer": {
-                  "version": "0.1.1",
-                  "from": "duplexer@~0.1.1",
-                  "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz"
-                }
-              }
-            },
-            "string_decoder": {
-              "version": "0.0.1",
-              "from": "string_decoder@~0.0.0"
-            },
-            "subarg": {
-              "version": "0.0.1",
-              "from": "subarg@0.0.1",
-              "resolved": "https://registry.npmjs.org/subarg/-/subarg-0.0.1.tgz",
-              "dependencies": {
-                "minimist": {
-                  "version": "0.0.10",
-                  "from": "minimist@~0.0.7",
-                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz"
-                }
-              }
-            },
-            "syntax-error": {
-              "version": "1.1.1",
-              "from": "syntax-error@^1.1.1",
-              "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.1.1.tgz",
-              "dependencies": {
-                "esprima-fb": {
-                  "version": "3001.1.0-dev-harmony-fb",
-                  "from": "esprima-fb@3001.1.0-dev-harmony-fb",
-                  "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz"
-                }
-              }
-            },
-            "through2": {
-              "version": "1.1.1",
-              "from": "through2@^1.0.0",
-              "resolved": "https://registry.npmjs.org/through2/-/through2-1.1.1.tgz",
-              "dependencies": {
-                "readable-stream": {
-                  "version": "1.1.13",
-                  "from": "readable-stream@>=1.1.13-1 <1.2.0-0",
-                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
-                  "dependencies": {
-                    "core-util-is": {
-                      "version": "1.0.1",
-                      "from": "core-util-is@~1.0.0",
-                      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.1.tgz"
-                    },
-                    "string_decoder": {
-                      "version": "0.10.31",
-                      "from": "string_decoder@~0.10.x",
-                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz"
-                    }
-                  }
-                },
-                "xtend": {
-                  "version": "4.0.0",
-                  "from": "xtend@>=4.0.0 <4.1.0-0",
-                  "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.0.tgz"
-                }
-              }
-            },
-            "timers-browserify": {
-              "version": "1.1.0",
-              "from": "timers-browserify@^1.0.1",
-              "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.1.0.tgz",
-              "dependencies": {
-                "process": {
-                  "version": "0.5.2",
-                  "from": "process@~0.5.1",
-                  "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz"
-                }
-              }
-            },
-            "tty-browserify": {
-              "version": "0.0.0",
-              "from": "tty-browserify@~0.0.0",
-              "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz"
-            },
-            "umd": {
-              "version": "2.1.0",
-              "from": "umd@~2.1.0",
-              "resolved": "https://registry.npmjs.org/umd/-/umd-2.1.0.tgz",
-              "dependencies": {
-                "rfile": {
-                  "version": "1.0.0",
-                  "from": "rfile@~1.0.0",
-                  "resolved": "https://registry.npmjs.org/rfile/-/rfile-1.0.0.tgz",
-                  "dependencies": {
-                    "callsite": {
-                      "version": "1.0.0",
-                      "from": "callsite@~1.0.0",
-                      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz"
-                    },
-                    "resolve": {
-                      "version": "0.3.1",
-                      "from": "resolve@~0.3.0",
-                      "resolved": "https://registry.npmjs.org/resolve/-/resolve-0.3.1.tgz"
-                    }
-                  }
-                },
-                "ruglify": {
-                  "version": "1.0.0",
-                  "from": "ruglify@~1.0.0",
-                  "resolved": "https://registry.npmjs.org/ruglify/-/ruglify-1.0.0.tgz",
-                  "dependencies": {
-                    "uglify-js": {
-                      "version": "2.2.5",
-                      "from": "uglify-js@~2.2",
-                      "dependencies": {
-                        "source-map": {
-                          "version": "0.1.39",
-                          "from": "source-map@~0.1.7",
-                          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.39.tgz",
-                          "dependencies": {
-                            "amdefine": {
-                              "version": "0.1.0",
-                              "from": "amdefine@>=0.0.4",
-                              "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-0.1.0.tgz"
-                            }
-                          }
-                        },
-                        "optimist": {
-                          "version": "0.3.7",
-                          "from": "optimist@~0.3.5",
-                          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
-                          "dependencies": {
-                            "wordwrap": {
-                              "version": "0.0.2",
-                              "from": "wordwrap@~0.0.2",
-                              "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "url": {
-              "version": "0.10.1",
-              "from": "url@~0.10.1",
-              "resolved": "https://registry.npmjs.org/url/-/url-0.10.1.tgz"
-            },
-            "util": {
-              "version": "0.10.3",
-              "from": "util@~0.10.1",
-              "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz"
-            },
-            "vm-browserify": {
-              "version": "0.0.4",
-              "from": "vm-browserify@~0.0.1",
-              "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
-              "dependencies": {
-                "indexof": {
-                  "version": "0.0.1",
-                  "from": "indexof@0.0.1",
-                  "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz"
-                }
-              }
-            },
-            "xtend": {
-              "version": "3.0.0",
-              "from": "xtend@^3.0.0",
-              "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz"
-            }
-          }
-        },
-        "through": {
-          "version": "2.3.4",
-          "from": "through@2.3.4",
-          "resolved": "https://registry.npmjs.org/through/-/through-2.3.4.tgz"
-        },
-        "grunt-contrib-clean": {
-          "version": "0.4.1",
-          "from": "grunt-contrib-clean@~0.4.1"
-        },
-        "connect": {
-          "version": "1.8.5",
-          "from": "connect@1.8.5",
-          "resolved": "https://registry.npmjs.org/connect/-/connect-1.8.5.tgz",
-          "dependencies": {
-            "qs": {
-              "version": "0.6.6",
-              "from": "qs@>= 0.4.0"
-            },
-            "mime": {
-              "version": "1.2.11",
-              "from": "mime@>= 0.0.1"
-            },
-            "formidable": {
-              "version": "1.0.14",
-              "from": "formidable@1.0.x"
-            }
-          }
-        },
-        "grunt": {
-          "version": "0.4.4",
-          "from": "grunt@~0.4.1",
-          "resolved": "https://registry.npmjs.org/grunt/-/grunt-0.4.4.tgz",
-          "dependencies": {
-            "async": {
-              "version": "0.1.22",
-              "from": "async@~0.1.22"
-            },
-            "coffee-script": {
-              "version": "1.3.3",
-              "from": "coffee-script@~1.3.3",
-              "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.3.3.tgz"
-            },
-            "colors": {
-              "version": "0.6.2",
-              "from": "colors@~0.6.2"
-            },
-            "dateformat": {
-              "version": "1.0.2-1.2.3",
-              "from": "dateformat@1.0.2-1.2.3",
-              "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.2-1.2.3.tgz"
-            },
-            "eventemitter2": {
-              "version": "0.4.13",
-              "from": "eventemitter2@~0.4.13"
-            },
-            "findup-sync": {
-              "version": "0.1.3",
-              "from": "findup-sync@~0.1.2",
-              "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.1.3.tgz",
-              "dependencies": {
-                "glob": {
-                  "version": "3.2.9",
-                  "from": "glob@>= 3.1.4",
-                  "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.9.tgz",
-                  "dependencies": {
-                    "inherits": {
-                      "version": "2.0.1",
-                      "from": "inherits@2"
-                    }
-                  }
-                },
-                "lodash": {
-                  "version": "2.4.1",
-                  "from": "lodash@~2.4.1"
-                }
-              }
-            },
-            "glob": {
-              "version": "3.1.21",
-              "from": "glob@~3.1.21",
-              "resolved": "https://registry.npmjs.org/glob/-/glob-3.1.21.tgz",
-              "dependencies": {
-                "graceful-fs": {
-                  "version": "1.2.3",
-                  "from": "graceful-fs@~1.2.0"
-                },
-                "inherits": {
-                  "version": "1.0.0",
-                  "from": "inherits@1"
-                }
-              }
-            },
-            "hooker": {
-              "version": "0.2.3",
-              "from": "hooker@~0.2.3",
-              "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
-            },
-            "iconv-lite": {
-              "version": "0.2.11",
-              "from": "iconv-lite@~0.2.11",
-              "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz"
-            },
-            "minimatch": {
-              "version": "0.2.14",
-              "from": "minimatch@0.x.x",
-              "dependencies": {
-                "lru-cache": {
-                  "version": "2.5.0",
-                  "from": "lru-cache@2"
-                },
-                "sigmund": {
-                  "version": "1.0.0",
-                  "from": "sigmund@~1.0.0"
-                }
-              }
-            },
-            "nopt": {
-              "version": "1.0.10",
-              "from": "nopt@~1.0.10",
-              "dependencies": {
-                "abbrev": {
-                  "version": "1.0.4",
-                  "from": "abbrev@1"
-                }
-              }
-            },
-            "rimraf": {
-              "version": "2.2.6",
-              "from": "rimraf@~2.2.6",
-              "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz"
-            },
-            "lodash": {
-              "version": "0.9.2",
-              "from": "lodash@~0.9.2"
-            },
-            "underscore.string": {
-              "version": "2.2.1",
-              "from": "underscore.string@~2.2.1"
-            },
-            "which": {
-              "version": "1.0.5",
-              "from": "which@~1.0.5"
-            },
-            "js-yaml": {
-              "version": "2.0.5",
-              "from": "js-yaml@~2.0.5",
-              "dependencies": {
-                "argparse": {
-                  "version": "0.1.15",
-                  "from": "argparse@~ 0.1.11",
-                  "dependencies": {
-                    "underscore": {
-                      "version": "1.4.4",
-                      "from": "underscore@~1.4.3"
-                    },
-                    "underscore.string": {
-                      "version": "2.3.3",
-                      "from": "underscore.string@~2.3.1"
-                    }
-                  }
-                },
-                "esprima": {
-                  "version": "1.0.4",
-                  "from": "esprima@~ 1.0.2"
-                }
-              }
-            },
-            "exit": {
-              "version": "0.1.2",
-              "from": "exit@~0.1.1",
-              "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz"
-            },
-            "getobject": {
-              "version": "0.1.0",
-              "from": "getobject@~0.1.0",
-              "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz"
-            },
-            "grunt-legacy-util": {
-              "version": "0.1.2",
-              "from": "grunt-legacy-util@~0.1.2",
-              "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-0.1.2.tgz"
-            }
-          }
-        },
-        "grunt-contrib-jshint": {
-          "version": "0.6.5",
-          "from": "grunt-contrib-jshint@~0.6.0",
-          "dependencies": {
-            "jshint": {
-              "version": "2.1.11",
-              "from": "jshint@~2.1.10",
-              "dependencies": {
-                "shelljs": {
-                  "version": "0.1.4",
-                  "from": "shelljs@0.1.x",
-                  "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.1.4.tgz"
-                },
-                "underscore": {
-                  "version": "1.4.4",
-                  "from": "underscore@1.4.x"
-                },
-                "cli": {
-                  "version": "0.4.5",
-                  "from": "cli@0.4.x",
-                  "dependencies": {
-                    "glob": {
-                      "version": "3.2.9",
-                      "from": "glob@>= 3.1.4",
-                      "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.9.tgz",
-                      "dependencies": {
-                        "inherits": {
-                          "version": "2.0.1",
-                          "from": "inherits@2"
-                        }
-                      }
-                    }
-                  }
-                },
-                "minimatch": {
-                  "version": "0.2.14",
-                  "from": "minimatch@0.x.x",
-                  "dependencies": {
-                    "lru-cache": {
-                      "version": "2.5.0",
-                      "from": "lru-cache@2",
-                      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
-                    },
-                    "sigmund": {
-                      "version": "1.0.0",
-                      "from": "sigmund@~1.0.0"
-                    }
-                  }
-                },
-                "console-browserify": {
-                  "version": "0.1.6",
-                  "from": "console-browserify@0.1.x"
-                }
-              }
-            }
-          }
-        },
-        "jsdom-nogyp": {
-          "version": "0.8.3",
-          "from": "jsdom-nogyp@0.8.3",
-          "resolved": "https://registry.npmjs.org/jsdom-nogyp/-/jsdom-nogyp-0.8.3.tgz",
-          "dependencies": {
-            "htmlparser2": {
-              "version": "3.7.1",
-              "from": "htmlparser2@>= 3.1.5 <4",
-              "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.7.1.tgz",
-              "dependencies": {
-                "domhandler": {
-                  "version": "2.2.0",
-                  "from": "domhandler@2.2",
-                  "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.0.tgz"
-                },
-                "domutils": {
-                  "version": "1.4.1",
-                  "from": "domutils@1.4",
-                  "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.4.1.tgz"
-                },
-                "domelementtype": {
-                  "version": "1.1.1",
-                  "from": "domelementtype@1"
-                },
-                "readable-stream": {
-                  "version": "1.1.11",
-                  "from": "readable-stream@1.1",
-                  "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.11.tgz",
-                  "dependencies": {
-                    "core-util-is": {
-                      "version": "1.0.1",
-                      "from": "core-util-is@~1.0.0"
-                    },
-                    "string_decoder": {
-                      "version": "0.10.25-1",
-                      "from": "string_decoder@~0.10.x",
-                      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.25-1.tgz"
-                    },
-                    "debuglog": {
-                      "version": "0.0.2",
-                      "from": "debuglog@0.0.2",
-                      "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-0.0.2.tgz"
-                    }
-                  }
-                },
-                "entities": {
-                  "version": "1.0.0",
-                  "from": "entities@1.0",
-                  "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz"
-                }
-              }
-            },
-            "nwmatcher": {
-              "version": "1.3.2",
-              "from": "nwmatcher@~1.3.1",
-              "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.2.tgz"
-            },
-            "request": {
-              "version": "2.34.0",
-              "from": "request@2.x",
-              "resolved": "https://registry.npmjs.org/request/-/request-2.34.0.tgz",
-              "dependencies": {
-                "qs": {
-                  "version": "0.6.6",
-                  "from": "qs@~0.6.0"
-                },
-                "json-stringify-safe": {
-                  "version": "5.0.0",
-                  "from": "json-stringify-safe@~5.0.0"
-                },
-                "forever-agent": {
-                  "version": "0.5.2",
-                  "from": "forever-agent@~0.5.0"
-                },
-                "node-uuid": {
-                  "version": "1.4.1",
-                  "from": "node-uuid@~1.4.0",
-                  "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz"
-                },
-                "mime": {
-                  "version": "1.2.11",
-                  "from": "mime@~1.2.9",
-                  "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
-                },
-                "tough-cookie": {
-                  "version": "0.12.1",
-                  "from": "tough-cookie@>=0.12.0",
-                  "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz",
-                  "dependencies": {
-                    "punycode": {
-                      "version": "1.2.4",
-                      "from": "punycode@>=0.2.0",
-                      "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz"
-                    }
-                  }
-                },
-                "form-data": {
-                  "version": "0.1.2",
-                  "from": "form-data@~0.1.0",
-                  "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz",
-                  "dependencies": {
-                    "combined-stream": {
-                      "version": "0.0.4",
-                      "from": "combined-stream@~0.0.4",
-                      "dependencies": {
-                        "delayed-stream": {
-                          "version": "0.0.5",
-                          "from": "delayed-stream@0.0.5"
-                        }
-                      }
-                    },
-                    "async": {
-                      "version": "0.2.10",
-                      "from": "async@~0.2.9"
-                    }
-                  }
-                },
-                "tunnel-agent": {
-                  "version": "0.3.0",
-                  "from": "tunnel-agent@~0.3.0",
-                  "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz"
-                },
-                "http-signature": {
-                  "version": "0.10.0",
-                  "from": "http-signature@~0.10.0",
-                  "dependencies": {
-                    "assert-plus": {
-                      "version": "0.1.2",
-                      "from": "assert-plus@0.1.2",
-                      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
-                    },
-                    "asn1": {
-                      "version": "0.1.11",
-                      "from": "asn1@0.1.11",
-                      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
-                    },
-                    "ctype": {
-                      "version": "0.5.2",
-                      "from": "ctype@0.5.2",
-                      "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz"
-                    }
-                  }
-                },
-                "oauth-sign": {
-                  "version": "0.3.0",
-                  "from": "oauth-sign@~0.3.0",
-                  "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz"
-                },
-                "hawk": {
-                  "version": "1.0.0",
-                  "from": "hawk@~1.0.0",
-                  "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz",
-                  "dependencies": {
-                    "hoek": {
-                      "version": "0.9.1",
-                      "from": "hoek@0.9.x"
-                    },
-                    "boom": {
-                      "version": "0.4.2",
-                      "from": "boom@0.4.x",
-                      "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz"
-                    },
-                    "cryptiles": {
-                      "version": "0.2.2",
-                      "from": "cryptiles@0.2.x"
-                    },
-                    "sntp": {
-                      "version": "0.2.4",
-                      "from": "sntp@0.2.x",
-                      "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz"
-                    }
-                  }
-                },
-                "aws-sign2": {
-                  "version": "0.5.0",
-                  "from": "aws-sign2@~0.5.0",
-                  "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz"
-                }
-              }
-            },
-            "xmlhttprequest": {
-              "version": "1.6.0",
-              "from": "xmlhttprequest@>=1.5.0"
-            },
-            "cssom": {
-              "version": "0.2.5",
-              "from": "cssom@~0.2.5",
-              "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.2.5.tgz"
-            },
-            "cssstyle": {
-              "version": "0.2.11",
-              "from": "cssstyle@~0.2.3",
-              "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.11.tgz",
-              "dependencies": {
-                "cssom": {
-                  "version": "0.3.0",
-                  "from": "cssom@0.3.x",
-                  "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.0.tgz"
-                }
-              }
-            }
-          }
-        },
-        "jasmine-node": {
-          "version": "1.14.5",
-          "from": "jasmine-node@1.14.x",
-          "resolved": "https://registry.npmjs.org/jasmine-node/-/jasmine-node-1.14.5.tgz",
-          "dependencies": {
-            "coffee-script": {
-              "version": "1.8.0",
-              "from": "coffee-script@>=1.0.1",
-              "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.8.0.tgz"
-            },
-            "jasmine-reporters": {
-              "version": "1.0.0",
-              "from": "jasmine-reporters@~1.0.0",
-              "resolved": "https://registry.npmjs.org/jasmine-reporters/-/jasmine-reporters-1.0.0.tgz"
-            },
-            "jasmine-growl-reporter": {
-              "version": "0.0.3",
-              "from": "jasmine-growl-reporter@~0.0.2",
-              "resolved": "https://registry.npmjs.org/jasmine-growl-reporter/-/jasmine-growl-reporter-0.0.3.tgz",
-              "dependencies": {
-                "growl": {
-                  "version": "1.7.0",
-                  "from": "growl@~1.7.0",
-                  "resolved": "https://registry.npmjs.org/growl/-/growl-1.7.0.tgz"
-                }
-              }
-            },
-            "requirejs": {
-              "version": "2.1.15",
-              "from": "requirejs@>=0.27.1",
-              "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.1.15.tgz"
-            },
-            "walkdir": {
-              "version": "0.0.7",
-              "from": "walkdir@>= 0.0.1",
-              "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.7.tgz"
-            },
-            "underscore": {
-              "version": "1.7.0",
-              "from": "underscore@>= 1.3.1",
-              "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz"
-            },
-            "gaze": {
-              "version": "0.3.4",
-              "from": "gaze@~0.3.2",
-              "resolved": "https://registry.npmjs.org/gaze/-/gaze-0.3.4.tgz",
-              "dependencies": {
-                "minimatch": {
-                  "version": "0.2.14",
-                  "from": "minimatch@~0.2.9",
-                  "dependencies": {
-                    "lru-cache": {
-                      "version": "2.5.0",
-                      "from": "lru-cache@2",
-                      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
-                    },
-                    "sigmund": {
-                      "version": "1.0.0",
-                      "from": "sigmund@~1.0.0",
-                      "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
-                    }
-                  }
-                },
-                "fileset": {
-                  "version": "0.1.5",
-                  "from": "fileset@~0.1.5",
-                  "resolved": "https://registry.npmjs.org/fileset/-/fileset-0.1.5.tgz",
-                  "dependencies": {
-                    "glob": {
-                      "version": "3.2.11",
-                      "from": "glob@3.x",
-                      "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
-                      "dependencies": {
-                        "inherits": {
-                          "version": "2.0.1",
-                          "from": "inherits@2",
-                          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
-                        },
-                        "minimatch": {
-                          "version": "0.3.0",
-                          "from": "minimatch@0.3",
-                          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
-                          "dependencies": {
-                            "lru-cache": {
-                              "version": "2.5.0",
-                              "from": "lru-cache@2",
-                              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
-                            },
-                            "sigmund": {
-                              "version": "1.0.0",
-                              "from": "sigmund@~1.0.0",
-                              "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
-                            }
-                          }
-                        }
-                      }
-                    }
-                  }
-                }
-              }
-            },
-            "mkdirp": {
-              "version": "0.3.5",
-              "from": "mkdirp@~0.3.5",
-              "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
-            }
-          }
-        }
-      }
-    },
-    "dep-graph": {
-      "version": "1.1.0",
-      "from": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz",
-      "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz",
-      "dependencies": {
-        "underscore": {
-          "version": "1.2.1",
-          "from": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz",
-          "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz"
-        }
-      }
-    },
-    "elementtree": {
-      "version": "0.1.5",
-      "from": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.5.tgz",
-      "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.5.tgz",
-      "dependencies": {
-        "sax": {
-          "version": "0.3.5",
-          "from": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
-          "resolved": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz"
-        }
-      }
-    },
-    "glob": {
-      "version": "3.2.11",
-      "from": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz",
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.1",
-          "from": "inherits@2.0.1",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
-        },
-        "minimatch": {
-          "version": "0.3.0",
-          "from": "minimatch@0.3.0",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz",
-          "dependencies": {
-            "lru-cache": {
-              "version": "2.5.0",
-              "from": "lru-cache@2.5.0",
-              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz"
-            },
-            "sigmund": {
-              "version": "1.0.0",
-              "from": "sigmund@1.0.0",
-              "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
-            }
-          }
-        }
-      }
-    },
-    "mime": {
-      "version": "1.2.11",
-      "from": "mime@1.2.11",
-      "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
-    },
-    "npm": {
-      "version": "1.3.4",
-      "from": "https://registry.npmjs.org/npm/-/npm-1.3.4.tgz",
-      "resolved": "https://registry.npmjs.org/npm/-/npm-1.3.4.tgz",
-      "dependencies": {
-        "semver": {
-          "version": "2.0.8",
-          "from": "semver@latest"
-        },
-        "ini": {
-          "version": "1.1.0",
-          "from": "ini@latest"
-        },
-        "slide": {
-          "version": "1.1.4",
-          "from": "slide@latest"
-        },
-        "abbrev": {
-          "version": "1.0.4",
-          "from": "abbrev@latest"
-        },
-        "graceful-fs": {
-          "version": "2.0.0",
-          "from": "graceful-fs@2"
-        },
-        "minimatch": {
-          "version": "0.2.12",
-          "from": "minimatch@latest",
-          "dependencies": {
-            "sigmund": {
-              "version": "1.0.0",
-              "from": "sigmund@~1.0.0",
-              "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz"
-            }
-          }
-        },
-        "nopt": {
-          "version": "2.1.1",
-          "from": "nopt@latest"
-        },
-        "rimraf": {
-          "version": "2.2.0",
-          "from": "rimraf@2.2"
-        },
-        "request": {
-          "version": "2.21.0",
-          "from": "request@latest",
-          "dependencies": {
-            "qs": {
-              "version": "0.6.5",
-              "from": "qs@~0.6.0"
-            },
-            "json-stringify-safe": {
-              "version": "4.0.0",
-              "from": "json-stringify-safe@~4.0.0"
-            },
-            "forever-agent": {
-              "version": "0.5.0",
-              "from": "forever-agent@~0.5.0"
-            },
-            "tunnel-agent": {
-              "version": "0.3.0",
-              "from": "tunnel-agent@~0.3.0"
-            },
-            "http-signature": {
-              "version": "0.9.11",
-              "from": "http-signature@~0.9.11",
-              "dependencies": {
-                "assert-plus": {
-                  "version": "0.1.2",
-                  "from": "assert-plus@0.1.2"
-                },
-                "asn1": {
-                  "version": "0.1.11",
-                  "from": "asn1@0.1.11"
-                },
-                "ctype": {
-                  "version": "0.5.2",
-                  "from": "ctype@0.5.2"
-                }
-              }
-            },
-            "hawk": {
-              "version": "0.13.1",
-              "from": "hawk@~0.13.0",
-              "dependencies": {
-                "hoek": {
-                  "version": "0.8.5",
-                  "from": "hoek@0.8.x"
-                },
-                "boom": {
-                  "version": "0.4.2",
-                  "from": "boom@0.4.x",
-                  "dependencies": {
-                    "hoek": {
-                      "version": "0.9.1",
-                      "from": "hoek@0.9.x",
-                      "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
-                    }
-                  }
-                },
-                "cryptiles": {
-                  "version": "0.2.1",
-                  "from": "cryptiles@0.2.x"
-                },
-                "sntp": {
-                  "version": "0.2.4",
-                  "from": "sntp@0.2.x",
-                  "dependencies": {
-                    "hoek": {
-                      "version": "0.9.1",
-                      "from": "hoek@0.9.x",
-                      "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
-                    }
-                  }
-                }
-              }
-            },
-            "aws-sign": {
-              "version": "0.3.0",
-              "from": "aws-sign@~0.3.0"
-            },
-            "oauth-sign": {
-              "version": "0.3.0",
-              "from": "oauth-sign@~0.3.0"
-            },
-            "cookie-jar": {
-              "version": "0.3.0",
-              "from": "cookie-jar@~0.3.0"
-            },
-            "node-uuid": {
-              "version": "1.4.0",
-              "from": "node-uuid@~1.4.0"
-            },
-            "mime": {
-              "version": "1.2.9",
-              "from": "mime@~1.2.9"
-            },
-            "form-data": {
-              "version": "0.0.8",
-              "from": "form-data@0.0.8",
-              "dependencies": {
-                "combined-stream": {
-                  "version": "0.0.4",
-                  "from": "combined-stream@~0.0.4",
-                  "dependencies": {
-                    "delayed-stream": {
-                      "version": "0.0.5",
-                      "from": "delayed-stream@0.0.5"
-                    }
-                  }
-                },
-                "async": {
-                  "version": "0.2.9",
-                  "from": "async@~0.2.7"
-                }
-              }
-            }
-          }
-        },
-        "which": {
-          "version": "1.0.5",
-          "from": "which@1"
-        },
-        "tar": {
-          "version": "0.1.17",
-          "from": "tar@0.1.17",
-          "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.17.tgz"
-        },
-        "fstream": {
-          "version": "0.1.23",
-          "from": "fstream@latest"
-        },
-        "block-stream": {
-          "version": "0.0.6",
-          "from": "block-stream@*"
-        },
-        "inherits": {
-          "version": "1.0.0",
-          "from": "git://github.com/isaacs/inherits"
-        },
-        "mkdirp": {
-          "version": "0.3.5",
-          "from": "mkdirp@0.3.5",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
-        },
-        "read": {
-          "version": "1.0.4",
-          "from": "read@~1.0.3",
-          "dependencies": {
-            "mute-stream": {
-              "version": "0.0.3",
-              "from": "mute-stream@~0.0.2"
-            }
-          }
-        },
-        "lru-cache": {
-          "version": "2.3.0",
-          "from": "lru-cache@latest"
-        },
-        "node-gyp": {
-          "version": "0.10.6",
-          "from": "node-gyp@latest"
-        },
-        "fstream-npm": {
-          "version": "0.1.4",
-          "from": "fstream-npm@latest",
-          "dependencies": {
-            "fstream-ignore": {
-              "version": "0.0.6",
-              "from": "fstream-ignore@~0.0.5"
-            }
-          }
-        },
-        "uid-number": {
-          "version": "0.0.3",
-          "from": "../uid-number"
-        },
-        "archy": {
-          "version": "0.0.2",
-          "from": "archy@0.0.2"
-        },
-        "chownr": {
-          "version": "0.0.1",
-          "from": "../chownr"
-        },
-        "npmlog": {
-          "version": "0.0.4",
-          "from": "npmlog@latest"
-        },
-        "ansi": {
-          "version": "0.1.2",
-          "from": "ansi@~0.1.2"
-        },
-        "npm-registry-client": {
-          "version": "0.2.27",
-          "from": "npm-registry-client@latest",
-          "dependencies": {
-            "couch-login": {
-              "version": "0.1.17",
-              "from": "couch-login@~0.1.15"
-            }
-          }
-        },
-        "read-package-json": {
-          "version": "1.1.0",
-          "from": "read-package-json@1",
-          "dependencies": {
-            "normalize-package-data": {
-              "version": "0.2.0",
-              "from": "normalize-package-data@~0.2",
-              "dependencies": {
-                "github-url-from-git": {
-                  "version": "1.1.1",
-                  "from": "github-url-from-git@~1.1.1"
-                }
-              }
-            }
-          }
-        },
-        "read-installed": {
-          "version": "0.2.2",
-          "from": "read-installed@latest"
-        },
-        "glob": {
-          "version": "3.2.3",
-          "from": "glob@latest",
-          "dependencies": {
-            "inherits": {
-              "version": "2.0.0",
-              "from": "inherits@2"
-            }
-          }
-        },
-        "init-package-json": {
-          "version": "0.0.10",
-          "from": "init-package-json@latest",
-          "dependencies": {
-            "promzard": {
-              "version": "0.2.0",
-              "from": "promzard@~0.2.0"
-            }
-          }
-        },
-        "osenv": {
-          "version": "0.0.3",
-          "from": "osenv@latest"
-        },
-        "lockfile": {
-          "version": "0.4.0",
-          "from": "lockfile@latest"
-        },
-        "retry": {
-          "version": "0.6.0",
-          "from": "retry"
-        },
-        "once": {
-          "version": "1.1.1",
-          "from": "once"
-        },
-        "npmconf": {
-          "version": "0.1.1",
-          "from": "npmconf@latest",
-          "dependencies": {
-            "config-chain": {
-              "version": "1.1.7",
-              "from": "config-chain@~1.1.1",
-              "dependencies": {
-                "proto-list": {
-                  "version": "1.2.2",
-                  "from": "proto-list@~1.2.1"
-                }
-              }
-            }
-          }
-        },
-        "opener": {
-          "version": "1.3.0",
-          "from": "opener@latest"
-        },
-        "chmodr": {
-          "version": "0.1.0",
-          "from": "chmodr@latest"
-        },
-        "cmd-shim": {
-          "version": "1.1.0",
-          "from": "cmd-shim@"
-        },
-        "sha": {
-          "version": "1.0.1",
-          "from": "sha@~1.0.1"
-        },
-        "editor": {
-          "version": "0.0.4",
-          "from": "editor@"
-        },
-        "child-process-close": {
-          "version": "0.1.1",
-          "from": "child-process-close@",
-          "resolved": "https://registry.npmjs.org/child-process-close/-/child-process-close-0.1.1.tgz"
-        },
-        "npm-user-validate": {
-          "version": "0.0.3",
-          "from": "npm-user-validate@0.0.3",
-          "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-0.0.3.tgz"
-        }
-      }
-    },
-    "npmconf": {
-      "version": "0.1.16",
-      "from": "npmconf@0.1.16",
-      "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-0.1.16.tgz",
-      "dependencies": {
-        "config-chain": {
-          "version": "1.1.8",
-          "from": "config-chain@1.1.8",
-          "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.8.tgz",
-          "dependencies": {
-            "proto-list": {
-              "version": "1.2.3",
-              "from": "proto-list@1.2.3",
-              "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.3.tgz"
-            }
-          }
-        },
-        "inherits": {
-          "version": "2.0.1",
-          "from": "inherits@2.0.1",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
-        },
-        "once": {
-          "version": "1.3.0",
-          "from": "once@1.3.0",
-          "resolved": "https://registry.npmjs.org/once/-/once-1.3.0.tgz"
-        },
-        "mkdirp": {
-          "version": "0.3.5",
-          "from": "mkdirp@~0.3.5",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz"
-        },
-        "nopt": {
-          "version": "2.2.1",
-          "from": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz",
-          "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz",
-          "dependencies": {
-            "abbrev": {
-              "version": "1.0.5",
-              "from": "abbrev@1.0.5",
-              "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz"
-            }
-          }
-        },
-        "ini": {
-          "version": "1.1.0",
-          "from": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz",
-          "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz"
-        }
-      }
-    },
-    "osenv": {
-      "version": "0.0.3",
-      "from": "osenv@0.0.3",
-      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz"
-    },
-    "plist": {
-      "version": "1.0.1",
-      "from": "plist@1.0.1",
-      "resolved": "https://registry.npmjs.org/plist/-/plist-1.0.1.tgz",
-      "dependencies": {
-        "base64-js": {
-          "version": "0.0.6",
-          "from": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.6.tgz",
-          "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.6.tgz"
-        },
-        "xmlbuilder": {
-          "version": "2.2.1",
-          "from": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.2.1.tgz",
-          "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-2.2.1.tgz",
-          "dependencies": {
-            "lodash-node": {
-              "version": "2.4.1",
-              "from": "lodash-node@2.4.1",
-              "resolved": "https://registry.npmjs.org/lodash-node/-/lodash-node-2.4.1.tgz"
-            }
-          }
-        },
-        "xmldom": {
-          "version": "0.1.19",
-          "from": "xmldom@0.1.19",
-          "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz"
-        },
-        "util-deprecate": {
-          "version": "1.0.0",
-          "from": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.0.tgz",
-          "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.0.tgz"
-        }
-      }
-    },
-    "properties-parser": {
-      "version": "0.2.3",
-      "from": "properties-parser@0.2.3",
-      "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.2.3.tgz"
-    },
-    "q": {
-      "version": "0.9.7",
-      "from": "q@0.9.7",
-      "resolved": "https://registry.npmjs.org/q/-/q-0.9.7.tgz"
-    },
-    "rc": {
-      "version": "0.3.0",
-      "from": "https://registry.npmjs.org/rc/-/rc-0.3.0.tgz",
-      "resolved": "https://registry.npmjs.org/rc/-/rc-0.3.0.tgz",
-      "dependencies": {
-        "optimist": {
-          "version": "0.3.7",
-          "from": "optimist@0.3.7",
-          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
-          "dependencies": {
-            "wordwrap": {
-              "version": "0.0.2",
-              "from": "wordwrap@0.0.2",
-              "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
-            }
-          }
-        },
-        "deep-extend": {
-          "version": "0.2.11",
-          "from": "deep-extend@0.2.11",
-          "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz"
-        },
-        "ini": {
-          "version": "1.1.0",
-          "from": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz",
-          "resolved": "https://registry.npmjs.org/ini/-/ini-1.1.0.tgz"
-        }
-      }
-    },
-    "request": {
-      "version": "2.22.0",
-      "from": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
-      "resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
-      "dependencies": {
-        "qs": {
-          "version": "0.6.6",
-          "from": "qs@0.6.6",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz"
-        },
-        "json-stringify-safe": {
-          "version": "4.0.0",
-          "from": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz",
-          "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz"
-        },
-        "forever-agent": {
-          "version": "0.5.2",
-          "from": "forever-agent@0.5.2",
-          "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz"
-        },
-        "tunnel-agent": {
-          "version": "0.3.0",
-          "from": "tunnel-agent@0.3.0",
-          "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz"
-        },
-        "http-signature": {
-          "version": "0.10.0",
-          "from": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz",
-          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz",
-          "dependencies": {
-            "assert-plus": {
-              "version": "0.1.2",
-              "from": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz",
-              "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz"
-            },
-            "asn1": {
-              "version": "0.1.11",
-              "from": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
-              "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz"
-            },
-            "ctype": {
-              "version": "0.5.2",
-              "from": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz",
-              "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz"
-            }
-          }
-        },
-        "hawk": {
-          "version": "0.13.1",
-          "from": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
-          "resolved": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
-          "dependencies": {
-            "hoek": {
-              "version": "0.8.5",
-              "from": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz",
-              "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz"
-            },
-            "boom": {
-              "version": "0.4.2",
-              "from": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
-              "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
-              "dependencies": {
-                "hoek": {
-                  "version": "0.9.1",
-                  "from": "hoek@0.9.1",
-                  "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
-                }
-              }
-            },
-            "cryptiles": {
-              "version": "0.2.2",
-              "from": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
-              "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz"
-            },
-            "sntp": {
-              "version": "0.2.4",
-              "from": "sntp@0.2.4",
-              "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
-              "dependencies": {
-                "hoek": {
-                  "version": "0.9.1",
-                  "from": "hoek@0.9.1",
-                  "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz"
-                }
-              }
-            }
-          }
-        },
-        "aws-sign": {
-          "version": "0.3.0",
-          "from": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz",
-          "resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz"
-        },
-        "oauth-sign": {
-          "version": "0.3.0",
-          "from": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
-          "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz"
-        },
-        "cookie-jar": {
-          "version": "0.3.0",
-          "from": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz",
-          "resolved": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz"
-        },
-        "node-uuid": {
-          "version": "1.4.1",
-          "from": "node-uuid@1.4.1",
-          "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz"
-        },
-        "form-data": {
-          "version": "0.0.8",
-          "from": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
-          "dependencies": {
-            "combined-stream": {
-              "version": "0.0.5",
-              "from": "combined-stream@0.0.5",
-              "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.5.tgz",
-              "dependencies": {
-                "delayed-stream": {
-                  "version": "0.0.5",
-                  "from": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
-                  "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz"
-                }
-              }
-            },
-            "async": {
-              "version": "0.2.10",
-              "from": "async@0.2.10",
-              "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
-            }
-          }
-        }
-      }
-    },
-    "semver": {
-      "version": "2.0.11",
-      "from": "https://registry.npmjs.org/semver/-/semver-2.0.11.tgz",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-2.0.11.tgz"
-    },
-    "shelljs": {
-      "version": "0.1.4",
-      "from": "shelljs@0.1.4"
-    },
-    "tar": {
-      "version": "0.1.20",
-      "from": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz",
-      "dependencies": {
-        "block-stream": {
-          "version": "0.0.7",
-          "from": "block-stream@0.0.7",
-          "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz"
-        },
-        "fstream": {
-          "version": "0.1.31",
-          "from": "fstream@0.1.31",
-          "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz",
-          "dependencies": {
-            "graceful-fs": {
-              "version": "3.0.2",
-              "from": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz",
-              "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.2.tgz"
-            },
-            "mkdirp": {
-              "version": "0.5.0",
-              "from": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
-              "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
-              "dependencies": {
-                "minimist": {
-                  "version": "0.0.8",
-                  "from": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
-                  "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
-                }
-              }
-            },
-            "rimraf": {
-              "version": "2.2.8",
-              "from": "rimraf@2.2.8"
-            }
-          }
-        },
-        "inherits": {
-          "version": "2.0.1",
-          "from": "inherits@2.0.1",
-          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
-        }
-      }
-    },
-    "underscore": {
-      "version": "1.4.4",
-      "from": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
-      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz"
-    },
-    "unorm": {
-      "version": "1.3.3",
-      "from": "unorm@1.3.3",
-      "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.3.3.tgz"
-    },
-    "xcode": {
-      "version": "0.6.7",
-      "from": "https://registry.npmjs.org/xcode/-/xcode-0.6.7.tgz",
-      "resolved": "https://registry.npmjs.org/xcode/-/xcode-0.6.7.tgz",
-      "dependencies": {
-        "pegjs": {
-          "version": "0.6.2",
-          "from": "https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz",
-          "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.6.2.tgz"
-        },
-        "node-uuid": {
-          "version": "1.3.3",
-          "from": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz",
-          "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.3.3.tgz"
-        }
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/6e04c26b/cordova-lib/package.json
----------------------------------------------------------------------
diff --git a/cordova-lib/package.json b/cordova-lib/package.json
index 557ac3f..990235e 100644
--- a/cordova-lib/package.json
+++ b/cordova-lib/package.json
@@ -2,7 +2,7 @@
   "author": "Apache Software Foundation",
   "name": "cordova-lib",
   "description": "Apache Cordova tools core lib and API",
-  "version": "0.21.12",
+  "version": "0.21.13",
   "repository": {
     "type": "git",
     "url": "git://git-wip-us.apache.org/repos/asf/cordova-lib.git"


[3/6] git commit: bumped to 3.6.3

Posted by st...@apache.org.
bumped to 3.6.3


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

Branch: refs/heads/master
Commit: f298e9c684c725a1f309add4a38a2e7147492f47
Parents: 62bdd24
Author: Marcel Kinard <cm...@gmail.com>
Authored: Fri Sep 12 17:29:53 2014 -0400
Committer: Steven Gill <st...@gmail.com>
Committed: Mon Sep 22 15:01:31 2014 -0700

----------------------------------------------------------------------
 cordova-lib/package.json             |  2 +-
 cordova-lib/src/cordova/platforms.js | 20 ++++++++++----------
 2 files changed, 11 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/f298e9c6/cordova-lib/package.json
----------------------------------------------------------------------
diff --git a/cordova-lib/package.json b/cordova-lib/package.json
index 0c7e380..fa550a8 100644
--- a/cordova-lib/package.json
+++ b/cordova-lib/package.json
@@ -2,7 +2,7 @@
   "author": "Apache Software Foundation",
   "name": "cordova-lib",
   "description": "Apache Cordova tools core lib and API",
-  "version": "0.21.11-dev",
+  "version": "0.21.11",
   "repository": {
     "type": "git",
     "url": "git://git-wip-us.apache.org/repos/asf/cordova-lib.git"

http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/f298e9c6/cordova-lib/src/cordova/platforms.js
----------------------------------------------------------------------
diff --git a/cordova-lib/src/cordova/platforms.js b/cordova-lib/src/cordova/platforms.js
index e52b0a8..72de60c 100644
--- a/cordova-lib/src/cordova/platforms.js
+++ b/cordova-lib/src/cordova/platforms.js
@@ -26,60 +26,60 @@ module.exports = {
         hostos : ['darwin'],
         parser : './metadata/ios_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-ios.git',
-        version: '3.6.1'
+        version: '3.6.3'
     },
     'android' : {
         parser : './metadata/android_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git',
-        version: '3.6.1'
+        version: '3.6.3'
     },
     'ubuntu' : {
         hostos : ['linux'],
         parser : './metadata/ubuntu_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-ubuntu.git',
-        version: '3.6.1'
+        version: '3.6.3'
     },
     'amazon-fireos' : {
         parser : './metadata/amazon_fireos_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-amazon-fireos.git',
-        version: '3.6.1'
+        version: '3.6.3'
     },
     'wp8' : {
         hostos : ['win32'],
         parser : './metadata/wp8_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-wp8.git',
-        version: '3.6.1',
+        version: '3.6.3',
         altplatform: 'wp',
         subdirectory: 'wp8'
     },
     'blackberry10' : {
         parser : './metadata/blackberry10_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-blackberry.git',
-        version: '3.6.1'
+        version: '3.6.3'
     },
     'www':{
         hostos : [],
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-app-hello-world.git',
         source : 'git',
-        version: '3.6.1'
+        version: '3.6.3'
     },
     'firefoxos':{
         parser: './metadata/firefoxos_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-firefoxos.git',
-        version: '3.6.1'
+        version: '3.6.3'
     },
     'windows8':{
         hostos : ['win32'],
         parser: './metadata/windows_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-windows.git',
-        version: '3.6.1',
+        version: '3.6.3',
         subdirectory: 'windows'
     },
     'windows':{
         hostos : ['win32'],
         parser: './metadata/windows_parser',
         url    : 'https://git-wip-us.apache.org/repos/asf?p=cordova-windows.git',
-        version: '3.6.1',
+        version: '3.6.3',
         subdirectory: 'windows'
     },
     'browser':{