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

[29/51] [abbrv] [partial] ios commit: CB-11445 rechecked in node_modules using npm 2

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

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

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

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/ls.js
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/ls.js b/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/ls.js
new file mode 100644
index 0000000..3345db4
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/ls.js
@@ -0,0 +1,126 @@
+var path = require('path');
+var fs = require('fs');
+var common = require('./common');
+var _cd = require('./cd');
+var _pwd = require('./pwd');
+
+//@
+//@ ### ls([options ,] path [,path ...])
+//@ ### ls([options ,] path_array)
+//@ Available options:
+//@
+//@ + `-R`: recursive
+//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ ls('projs/*.js');
+//@ ls('-R', '/users/me', '/tmp');
+//@ ls('-R', ['/users/me', '/tmp']); // same as above
+//@ ```
+//@
+//@ Returns array of files in the given path, or in current directory if no path provided.
+function _ls(options, paths) {
+  options = common.parseOptions(options, {
+    'R': 'recursive',
+    'A': 'all',
+    'a': 'all_deprecated'
+  });
+
+  if (options.all_deprecated) {
+    // We won't support the -a option as it's hard to image why it's useful
+    // (it includes '.' and '..' in addition to '.*' files)
+    // For backwards compatibility we'll dump a deprecated message and proceed as before
+    common.log('ls: Option -a is deprecated. Use -A instead');
+    options.all = true;
+  }
+
+  if (!paths)
+    paths = ['.'];
+  else if (typeof paths === 'object')
+    paths = paths; // assume array
+  else if (typeof paths === 'string')
+    paths = [].slice.call(arguments, 1);
+
+  var list = [];
+
+  // Conditionally pushes file to list - returns true if pushed, false otherwise
+  // (e.g. prevents hidden files to be included unless explicitly told so)
+  function pushFile(file, query) {
+    // hidden file?
+    if (path.basename(file)[0] === '.') {
+      // not explicitly asking for hidden files?
+      if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
+        return false;
+    }
+
+    if (common.platform === 'win')
+      file = file.replace(/\\/g, '/');
+
+    list.push(file);
+    return true;
+  }
+
+  paths.forEach(function(p) {
+    if (fs.existsSync(p)) {
+      var stats = fs.statSync(p);
+      // Simple file?
+      if (stats.isFile()) {
+        pushFile(p, p);
+        return; // continue
+      }
+
+      // Simple dir?
+      if (stats.isDirectory()) {
+        // Iterate over p contents
+        fs.readdirSync(p).forEach(function(file) {
+          if (!pushFile(file, p))
+            return;
+
+          // Recursive?
+          if (options.recursive) {
+            var oldDir = _pwd();
+            _cd('', p);
+            if (fs.statSync(file).isDirectory())
+              list = list.concat(_ls('-R'+(options.all?'A':''), file+'/*'));
+            _cd('', oldDir);
+          }
+        });
+        return; // continue
+      }
+    }
+
+    // p does not exist - possible wildcard present
+
+    var basename = path.basename(p);
+    var dirname = path.dirname(p);
+    // Wildcard present on an existing dir? (e.g. '/tmp/*.js')
+    if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
+      // Escape special regular expression chars
+      var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
+      // Translates wildcard into regex
+      regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
+      // Iterate over directory contents
+      fs.readdirSync(dirname).forEach(function(file) {
+        if (file.match(new RegExp(regexp))) {
+          if (!pushFile(path.normalize(dirname+'/'+file), basename))
+            return;
+
+          // Recursive?
+          if (options.recursive) {
+            var pp = dirname + '/' + file;
+            if (fs.lstatSync(pp).isDirectory())
+              list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
+          } // recursive
+        } // if file matches
+      }); // forEach
+      return;
+    }
+
+    common.error('no such file or directory: ' + p, true);
+  });
+
+  return list;
+}
+module.exports = _ls;

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/sed.js
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/sed.js b/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/sed.js
new file mode 100644
index 0000000..9783252
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/sed.js
@@ -0,0 +1,43 @@
+var common = require('./common');
+var fs = require('fs');
+
+//@
+//@ ### sed([options ,] search_regex, replace_str, file)
+//@ Available options:
+//@
+//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
+//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
+//@ ```
+//@
+//@ Reads an input string from `file` and performs a JavaScript `replace()` on the input
+//@ using the given search regex and replacement string. Returns the new string after replacement.
+function _sed(options, regex, replacement, file) {
+  options = common.parseOptions(options, {
+    'i': 'inplace'
+  });
+
+  if (typeof replacement === 'string')
+    replacement = replacement; // no-op
+  else if (typeof replacement === 'number')
+    replacement = replacement.toString(); // fallback
+  else
+    common.error('invalid replacement string');
+
+  if (!file)
+    common.error('no file given');
+
+  if (!fs.existsSync(file))
+    common.error('no such file or directory: ' + file);
+
+  var result = fs.readFileSync(file, 'utf8').replace(regex, replacement);
+  if (options.inplace)
+    fs.writeFileSync(file, result, 'utf8');
+
+  return common.ShellString(result);
+}
+module.exports = _sed;

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

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

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

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

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/which.js
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/which.js b/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/which.js
new file mode 100644
index 0000000..fadb96c
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/node_modules/shelljs/src/which.js
@@ -0,0 +1,79 @@
+var common = require('./common');
+var fs = require('fs');
+var path = require('path');
+
+// Cross-platform method for splitting environment PATH variables
+function splitPath(p) {
+  for (i=1;i<2;i++) {}
+
+  if (!p)
+    return [];
+
+  if (common.platform === 'win')
+    return p.split(';');
+  else
+    return p.split(':');
+}
+
+//@
+//@ ### which(command)
+//@
+//@ Examples:
+//@
+//@ ```javascript
+//@ var nodeExec = which('node');
+//@ ```
+//@
+//@ Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
+//@ Returns string containing the absolute path to the command.
+function _which(options, cmd) {
+  if (!cmd)
+    common.error('must specify command');
+
+  var pathEnv = process.env.path || process.env.Path || process.env.PATH,
+      pathArray = splitPath(pathEnv),
+      where = null;
+
+  // No relative/absolute paths provided?
+  if (cmd.search(/\//) === -1) {
+    // Search for command in PATH
+    pathArray.forEach(function(dir) {
+      if (where)
+        return; // already found it
+
+      var attempt = path.resolve(dir + '/' + cmd);
+      if (fs.existsSync(attempt)) {
+        where = attempt;
+        return;
+      }
+
+      if (common.platform === 'win') {
+        var baseAttempt = attempt;
+        attempt = baseAttempt + '.exe';
+        if (fs.existsSync(attempt)) {
+          where = attempt;
+          return;
+        }
+        attempt = baseAttempt + '.cmd';
+        if (fs.existsSync(attempt)) {
+          where = attempt;
+          return;
+        }
+        attempt = baseAttempt + '.bat';
+        if (fs.existsSync(attempt)) {
+          where = attempt;
+          return;
+        }
+      } // if 'win'
+    });
+  }
+
+  // Command not found anywhere?
+  if (!fs.existsSync(cmd) && !where)
+    return null;
+
+  where = where || path.resolve(cmd);
+
+  return common.ShellString(where);
+}
+module.exports = _which;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/node_modules/tail/README.md
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/node_modules/tail/README.md b/node_modules/ios-sim/node_modules/simctl/node_modules/tail/README.md
new file mode 100644
index 0000000..eec282c
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/node_modules/tail/README.md
@@ -0,0 +1,72 @@
+#tail
+
+To install:
+
+```bash
+npm install tail
+```
+
+#Use:
+```javascript
+Tail = require('tail').Tail;
+
+tail = new Tail("fileToTail");
+
+tail.on("line", function(data) {
+  console.log(data);
+});
+
+tail.on("error", function(error) {
+  console.log('ERROR: ', error);
+});
+````
+
+Tail constructor accepts few parameters:
+
+```javascript
+
+var fileToTail = "/path/to/fileToTail.txt";
+var lineSeparator= "\n";
+var fromBeginning = false;
+var watchOptions = {}; \\ as per node fs.watch documentations
+
+new Tail(fileToTail, lineSeparator, watchOptions,fromBeginning)
+```
+
+* `fileToTail` is the name (inclusive of the path) of the file to tail
+* `lineSeparator` is the line separator token (default "\n")
+* `watchOptions` is the full set of options that can be passed to `fs.watch` as per node documentation (default: {})
+* `fromBeginning` force the tail of the file from the very beginning of it instead of from the first new line that will be appended(default: "\n")
+
+The only mandatory one is the first, i.e. the the file you want to tail.
+
+Tail emits two type of events:
+
+* line
+```
+function(data){}
+```
+* error
+```
+function(exception){}
+```
+
+If you simply want to stop the tail:
+
+```javascript
+tail.unwatch()
+```
+
+And to start watching again:
+```javascript
+tail.watch()
+```
+
+#Want to fork ?
+
+Tail is written in [CoffeeScript](http://jashkenas.github.com/coffee-script/).
+
+The Cakefile generates the javascript that is then published to npm.
+
+#License
+MIT. Please see License file for more details.

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/node_modules/tail/package.json
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/node_modules/tail/package.json b/node_modules/ios-sim/node_modules/simctl/node_modules/tail/package.json
new file mode 100644
index 0000000..95e9edd
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/node_modules/tail/package.json
@@ -0,0 +1,57 @@
+{
+  "author": {
+    "name": "Luca Grulla"
+  },
+  "contributors": [
+    {
+      "name": "Luca Grulla"
+    },
+    {
+      "name": "Tom Hall"
+    },
+    {
+      "name": "Andy Kent"
+    }
+  ],
+  "name": "tail",
+  "description": "tail a file in node",
+  "version": "0.4.0",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/lucagrulla/node-tail.git"
+  },
+  "main": "tail",
+  "engines": {
+    "node": ">= 0.4.0"
+  },
+  "dependencies": {},
+  "devDependencies": {
+    "coffee-script": "1.7.1"
+  },
+  "bugs": {
+    "url": "https://github.com/lucagrulla/node-tail/issues"
+  },
+  "homepage": "https://github.com/lucagrulla/node-tail",
+  "_id": "tail@0.4.0",
+  "scripts": {},
+  "_shasum": "d29de72750cc99db1e053aff13c359ecfb713002",
+  "_from": "tail@>=0.4.0 <0.5.0",
+  "_npmVersion": "1.4.15",
+  "_npmUser": {
+    "name": "lucagrulla",
+    "email": "luca.grulla@gmail.com"
+  },
+  "maintainers": [
+    {
+      "name": "lucagrulla",
+      "email": "luca.grulla@gmail.com"
+    }
+  ],
+  "dist": {
+    "shasum": "d29de72750cc99db1e053aff13c359ecfb713002",
+    "tarball": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz"
+  },
+  "directories": {},
+  "_resolved": "http://registry.npmjs.org/tail/-/tail-0.4.0.tgz",
+  "readme": "ERROR: No README data found!"
+}

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/node_modules/tail/tail.js
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/node_modules/tail/tail.js b/node_modules/ios-sim/node_modules/simctl/node_modules/tail/tail.js
new file mode 100644
index 0000000..061ceab
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/node_modules/tail/tail.js
@@ -0,0 +1,147 @@
+// Generated by CoffeeScript 1.6.2
+var Tail, environment, events, fs,
+  __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
+  __hasProp = {}.hasOwnProperty,
+  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+events = require("events");
+
+fs = require('fs');
+
+environment = process.env['NODE_ENV'] || 'development';
+
+Tail = (function(_super) {
+  __extends(Tail, _super);
+
+  Tail.prototype.readBlock = function() {
+    var block, stream,
+      _this = this;
+
+    if (this.queue.length >= 1) {
+      block = this.queue.shift();
+      if (block.end > block.start) {
+        stream = fs.createReadStream(this.filename, {
+          start: block.start,
+          end: block.end - 1,
+          encoding: "utf-8"
+        });
+        stream.on('error', function(error) {
+          console.log("Tail error:" + error);
+          return _this.emit('error', error);
+        });
+        stream.on('end', function() {
+          if (_this.queue.length >= 1) {
+            return _this.internalDispatcher.emit("next");
+          }
+        });
+        return stream.on('data', function(data) {
+          var chunk, parts, _i, _len, _results;
+
+          _this.buffer += data;
+          parts = _this.buffer.split(_this.separator);
+          _this.buffer = parts.pop();
+          _results = [];
+          for (_i = 0, _len = parts.length; _i < _len; _i++) {
+            chunk = parts[_i];
+            _results.push(_this.emit("line", chunk));
+          }
+          return _results;
+        });
+      }
+    }
+  };
+
+  function Tail(filename, separator, fsWatchOptions, frombeginning) {
+    var stats,
+      _this = this;
+
+    this.filename = filename;
+    this.separator = separator != null ? separator : '\n';
+    this.fsWatchOptions = fsWatchOptions != null ? fsWatchOptions : {};
+    this.frombeginning = frombeginning != null ? frombeginning : false;
+    this.readBlock = __bind(this.readBlock, this);
+    this.buffer = '';
+    this.internalDispatcher = new events.EventEmitter();
+    this.queue = [];
+    this.isWatching = false;
+    stats = fs.statSync(this.filename);
+    this.internalDispatcher.on('next', function() {
+      return _this.readBlock();
+    });
+    this.pos = this.frombeginning ? 0 : stats.size;
+    this.watch();
+  }
+
+  Tail.prototype.watch = function() {
+    var _this = this;
+
+    if (this.isWatching) {
+      return;
+    }
+    this.isWatching = true;
+    if (fs.watch) {
+      return this.watcher = fs.watch(this.filename, this.fsWatchOptions, function(e) {
+        return _this.watchEvent(e);
+      });
+    } else {
+      return fs.watchFile(this.filename, this.fsWatchOptions, function(curr, prev) {
+        return _this.watchFileEvent(curr, prev);
+      });
+    }
+  };
+
+  Tail.prototype.watchEvent = function(e) {
+    var stats,
+      _this = this;
+
+    if (e === 'change') {
+      stats = fs.statSync(this.filename);
+      if (stats.size < this.pos) {
+        this.pos = stats.size;
+      }
+      if (stats.size > this.pos) {
+        this.queue.push({
+          start: this.pos,
+          end: stats.size
+        });
+        this.pos = stats.size;
+        if (this.queue.length === 1) {
+          return this.internalDispatcher.emit("next");
+        }
+      }
+    } else if (e === 'rename') {
+      this.unwatch();
+      return setTimeout((function() {
+        return _this.watch();
+      }), 1000);
+    }
+  };
+
+  Tail.prototype.watchFileEvent = function(curr, prev) {
+    if (curr.size > prev.size) {
+      this.queue.push({
+        start: prev.size,
+        end: curr.size
+      });
+      if (this.queue.length === 1) {
+        return this.internalDispatcher.emit("next");
+      }
+    }
+  };
+
+  Tail.prototype.unwatch = function() {
+    if (fs.watch && this.watcher) {
+      this.watcher.close();
+      this.pos = 0;
+    } else {
+      fs.unwatchFile(this.filename);
+    }
+    this.isWatching = false;
+    return this.queue = [];
+  };
+
+  return Tail;
+
+})(events.EventEmitter);
+
+exports.Tail = Tail;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/package.json
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/package.json b/node_modules/ios-sim/node_modules/simctl/package.json
new file mode 100644
index 0000000..82b5432
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/package.json
@@ -0,0 +1,54 @@
+{
+  "name": "simctl",
+  "version": "0.0.9",
+  "description": "library for Xcode simctl utility on OS X",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/phonegap/simctl.git"
+  },
+  "main": "simctl.js",
+  "dependencies": {
+    "shelljs": "^0.2.6",
+    "tail": "^0.4.0"
+  },
+  "keywords": [
+    "simctl",
+    "iOS Simulator"
+  ],
+  "author": {
+    "name": "Shazron Abdullah"
+  },
+  "license": "MIT",
+  "gitHead": "34426c719130a73b83af65f50a11a46267a5ad0b",
+  "bugs": {
+    "url": "https://github.com/phonegap/simctl/issues"
+  },
+  "homepage": "https://github.com/phonegap/simctl#readme",
+  "_id": "simctl@0.0.9",
+  "scripts": {},
+  "_shasum": "cd36c9d3a1ae1709645f97e0ce205cc3cac6fd1b",
+  "_from": "simctl@>=0.0.9 <0.0.10",
+  "_npmVersion": "2.11.3",
+  "_nodeVersion": "0.12.7",
+  "_npmUser": {
+    "name": "shazron",
+    "email": "shazron@gmail.com"
+  },
+  "dist": {
+    "shasum": "cd36c9d3a1ae1709645f97e0ce205cc3cac6fd1b",
+    "tarball": "https://registry.npmjs.org/simctl/-/simctl-0.0.9.tgz"
+  },
+  "maintainers": [
+    {
+      "name": "shazron",
+      "email": "shazron@gmail.com"
+    }
+  ],
+  "_npmOperationalInternal": {
+    "host": "packages-13-west.internal.npmjs.com",
+    "tmp": "tmp/simctl-0.0.9.tgz_1458354134802_0.09800405637361109"
+  },
+  "directories": {},
+  "_resolved": "http://registry.npmjs.org/simctl/-/simctl-0.0.9.tgz",
+  "readme": "ERROR: No README data found!"
+}

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/node_modules/simctl/simctl.js
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/node_modules/simctl/simctl.js b/node_modules/ios-sim/node_modules/simctl/simctl.js
new file mode 100644
index 0000000..91512ed
--- /dev/null
+++ b/node_modules/ios-sim/node_modules/simctl/simctl.js
@@ -0,0 +1,195 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2014 Shazron Abdullah.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+var shell = require('shelljs'),
+    path = require('path'),
+    util = require('util'),
+    Tail = require('tail').Tail,
+    SimCtlExtensions = require('./lib/simctl-extensions'),
+    SimCtlListParser = require('./lib/simctl-list-parser');
+
+
+exports = module.exports = {
+    
+    set noxpc(b) {
+        this._noxpc = b;
+    },
+    
+    get noxpc() {
+        return this._noxpc;
+    },
+    
+    extensions : SimCtlExtensions,
+    
+    check_prerequisites : function() {
+        var command = util.format('xcrun simctl help');
+        var obj = shell.exec(command, {silent: true});
+
+        if (obj.code !== 0) {
+            obj.output  = 'simctl was not found.\n';
+            obj.output += 'Check that you have Xcode 6.x installed:\n';
+            obj.output += '\txcodebuild --version';
+            obj.output += 'Check that you have Xcode 6.x selected:\n';
+            obj.output += '\txcode-select --print-path';
+        }
+        
+        return obj;
+    },
+    
+    create : function(name, device_type_id, runtime_id) {
+        var command = util.format('xcrun simctl create "%s" "%s" "%s"', name, device_type_id, runtime_id);
+        return shell.exec(command);
+    },
+    
+    del : function(device) {
+        var command = util.format('xcrun simctl delete "%s"', device);
+        return shell.exec(command);
+    },
+    
+    erase : function(device) {
+        var command = util.format('xcrun simctl erase "%s"', device);
+        return shell.exec(command);
+    },
+    
+    boot : function(device) {
+        var command = util.format('xcrun simctl boot "%s"', device);
+        return shell.exec(command);
+    },
+    
+    shutdown : function(device) {
+        var command = util.format('xcrun simctl shutdown "%s"', device);
+        return shell.exec(command);
+    },
+    
+    rename : function(device, name) {
+        var command = util.format('xcrun simctl rename "%s" "%s"', device, name);
+        return shell.exec(command);
+    },
+    
+    getenv : function(device, variable_name) {
+        var command = util.format('xcrun simctl getenv "%s" "%s"', device, variable_name);
+        return shell.exec(command);
+    },
+    
+    openurl : function(device, url) {
+        var command = util.format('xcrun simctl openurl "%s" "%s"', device, url);
+        return shell.exec(command);
+    },
+    
+    addphoto : function(device, path) {
+        var command = util.format('xcrun simctl addphoto "%s" "%s"', device, path);
+        return shell.exec(command);
+    },
+    
+    install : function(device, path) {
+        var command = util.format('xcrun simctl install "%s" "%s"', device, path);
+        return shell.exec(command);
+    },
+    
+    uninstall : function(device, app_identifier) {
+        var command = util.format('xcrun simctl uninstall "%s" "%s"', device, app_identifier);
+        return shell.exec(command);
+    },
+    
+    launch : function(wait_for_debugger, device, app_identifier, argv) {
+        var wait_flag = '';
+        if (wait_for_debugger) {
+            wait_flag = '--wait-for-debugger';
+        }
+        
+        var argv_expanded = '';
+        if (argv.length > 0) {
+            argv_expanded = argv.map(function(arg){
+                return "'" + arg + "'";
+            }).join(" "); 
+        }
+        
+        var command = util.format('xcrun simctl launch %s "%s" "%s" %s', wait_flag, device, app_identifier, argv_expanded);
+        return shell.exec(command);
+    },
+    
+    spawn : function(wait_for_debugger, arch, device, path_to_executable, argv) {
+        var wait_flag = '';
+        if (wait_for_debugger) {
+            wait_flag = '--wait-for-debugger';
+        }
+
+        var arch_flag = '';
+        if (arch) {
+            arch_flag = util.format('--arch="%s"', arch);
+        }
+        
+        var argv_expanded = '';
+        if (argv.length > 0) {
+            argv_expanded = argv.map(function(arg){
+                return "'" + arg + "'";
+            }).join(" "); 
+        }
+        
+        var command = util.format('xcrun simctl spawn %s %s "%s" "%s" %s', wait_flag, arch_flag, device, path_to_executable, argv_expanded);
+        return shell.exec(command);
+    },
+    
+    list : function(options) {
+        var sublist = '';
+        options = options || {};
+        
+        if (options.devices) {
+            sublist = 'devices';
+        } else if (options.devicetypes) {
+            sublist = 'devicetypes';
+        } else if (options.runtimes) {
+            sublist = 'runtimes';
+        }
+        
+        var command = util.format('xcrun simctl list %s', sublist);
+        var obj = shell.exec(command, { silent: options.silent });
+
+        if (obj.code === 0) {
+            try {
+                var parser = new SimCtlListParser();
+                obj.json = parser.parse(obj.output);
+            } catch(err) {
+                console.error(err.stack);
+            }
+        }
+
+        return obj;
+    },
+    
+    notify_post : function(device, notification_name) {
+        var command = util.format('xcrun simctl notify_post "%s" "%s"', device, notification_name);
+        return shell.exec(command);
+    },
+    
+    icloud_sync : function(device) {
+        var command = util.format('xcrun simctl icloud_sync "%s"', device);
+        return shell.exec(command);
+    },
+    
+    help : function(subcommand) {
+        var command = util.format('xcrun simctl help "%s"', subcommand);
+        return shell.exec(command);
+    }
+};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/ios-sim/package.json
----------------------------------------------------------------------
diff --git a/node_modules/ios-sim/package.json b/node_modules/ios-sim/package.json
index 60fb6cd..32da874 100644
--- a/node_modules/ios-sim/package.json
+++ b/node_modules/ios-sim/package.json
@@ -1,108 +1,81 @@
 {
-  "_args": [
-    [
-      "ios-sim@^5.0.7",
-      "/Users/steveng/repo/cordova/cordova-ios"
-    ]
-  ],
-  "_from": "ios-sim@>=5.0.7 <6.0.0",
-  "_id": "ios-sim@5.0.8",
-  "_inCache": true,
-  "_installable": true,
-  "_location": "/ios-sim",
-  "_nodeVersion": "0.12.7",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/ios-sim-5.0.8.tgz_1458757739978_0.3562360794749111"
-  },
-  "_npmUser": {
-    "email": "shazron@gmail.com",
-    "name": "shazron"
-  },
-  "_npmVersion": "2.11.3",
-  "_phantomChildren": {
-    "abbrev": "1.0.9"
+  "name": "ios-sim",
+  "version": "5.0.8",
+  "preferGlobal": "true",
+  "description": "launch iOS apps into the iOS Simulator from the command line (Xcode 6.0+)",
+  "main": "ios-sim.js",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/phonegap/ios-sim.git"
   },
-  "_requested": {
-    "name": "ios-sim",
-    "raw": "ios-sim@^5.0.7",
-    "rawSpec": "^5.0.7",
-    "scope": null,
-    "spec": ">=5.0.7 <6.0.0",
-    "type": "range"
+  "engines": {
+    "node": ">=0.10.0"
   },
-  "_requiredBy": [
-    "/"
+  "keywords": [
+    "ios-sim",
+    "iOS Simulator"
   ],
-  "_resolved": "http://registry.npmjs.org/ios-sim/-/ios-sim-5.0.8.tgz",
-  "_shasum": "20520bbcfdadb0b0cb08690b90969b6e60a9a796",
-  "_shrinkwrap": null,
-  "_spec": "ios-sim@^5.0.7",
-  "_where": "/Users/steveng/repo/cordova/cordova-ios",
-  "author": {
-    "name": "Shazron Abdullah"
-  },
   "bin": {
     "ios-sim": "./bin/ios-sim"
   },
   "bugs": {
     "url": "https://github.com/phonegap/ios-sim/issues"
   },
+  "author": {
+    "name": "Shazron Abdullah"
+  },
+  "license": "MIT",
   "dependencies": {
-    "bplist-parser": "^0.0.6",
-    "nopt": "1.0.9",
     "plist": "^1.2.0",
-    "simctl": "^0.0.9"
+    "simctl": "^0.0.9",
+    "nopt": "1.0.9",
+    "bplist-parser": "^0.0.6"
   },
-  "description": "launch iOS apps into the iOS Simulator from the command line (Xcode 6.0+)",
   "devDependencies": {
     "jshint": "^2.9.1"
   },
-  "directories": {},
+  "scripts": {
+    "test": "npm run jshint",
+    "jshint": "jshint src ./ios-sim.js"
+  },
+  "gitHead": "f0fc8160c262fe86ccaf8eeef1ff4ef22eb19b5c",
+  "homepage": "https://github.com/phonegap/ios-sim#readme",
+  "_id": "ios-sim@5.0.8",
+  "_shasum": "20520bbcfdadb0b0cb08690b90969b6e60a9a796",
+  "_from": "ios-sim@>=5.0.7 <6.0.0",
+  "_npmVersion": "2.11.3",
+  "_nodeVersion": "0.12.7",
+  "_npmUser": {
+    "name": "shazron",
+    "email": "shazron@gmail.com"
+  },
   "dist": {
     "shasum": "20520bbcfdadb0b0cb08690b90969b6e60a9a796",
     "tarball": "https://registry.npmjs.org/ios-sim/-/ios-sim-5.0.8.tgz"
   },
-  "engines": {
-    "node": ">=0.10.0"
-  },
-  "gitHead": "f0fc8160c262fe86ccaf8eeef1ff4ef22eb19b5c",
-  "homepage": "https://github.com/phonegap/ios-sim#readme",
-  "keywords": [
-    "ios-sim",
-    "iOS Simulator"
-  ],
-  "license": "MIT",
-  "main": "ios-sim.js",
   "maintainers": [
     {
-      "email": "simon.macdonald@gmail.com",
-      "name": "macdonst"
+      "name": "macdonst",
+      "email": "simon.macdonald@gmail.com"
     },
     {
-      "email": "purplecabbage@gmail.com",
-      "name": "purplecabbage"
+      "name": "purplecabbage",
+      "email": "purplecabbage@gmail.com"
     },
     {
-      "email": "shazron@gmail.com",
-      "name": "shazron"
+      "name": "shazron",
+      "email": "shazron@gmail.com"
     },
     {
-      "email": "stevengill97@gmail.com",
-      "name": "stevegill"
+      "name": "stevegill",
+      "email": "stevengill97@gmail.com"
     }
   ],
-  "name": "ios-sim",
-  "optionalDependencies": {},
-  "preferGlobal": "true",
-  "readme": "ERROR: No README data found!",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/phonegap/ios-sim.git"
-  },
-  "scripts": {
-    "jshint": "jshint src ./ios-sim.js",
-    "test": "npm run jshint"
+  "_npmOperationalInternal": {
+    "host": "packages-12-west.internal.npmjs.com",
+    "tmp": "tmp/ios-sim-5.0.8.tgz_1458757739978_0.3562360794749111"
   },
-  "version": "5.0.8"
+  "directories": {},
+  "_resolved": "http://registry.npmjs.org/ios-sim/-/ios-sim-5.0.8.tgz",
+  "readme": "ERROR: No README data found!"
 }

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/LICENSE
----------------------------------------------------------------------
diff --git a/node_modules/lodash/LICENSE b/node_modules/lodash/LICENSE
deleted file mode 100644
index 9cd87e5..0000000
--- a/node_modules/lodash/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
-Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas,
-DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/README.md
----------------------------------------------------------------------
diff --git a/node_modules/lodash/README.md b/node_modules/lodash/README.md
deleted file mode 100644
index fd98e5c..0000000
--- a/node_modules/lodash/README.md
+++ /dev/null
@@ -1,121 +0,0 @@
-# lodash v3.10.1
-
-The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash](https://lodash.com/) exported as [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) modules.
-
-Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):
-```bash
-$ lodash modularize modern exports=node -o ./
-$ lodash modern -d -o ./index.js
-```
-
-## Installation
-
-Using npm:
-
-```bash
-$ {sudo -H} npm i -g npm
-$ npm i --save lodash
-```
-
-In Node.js/io.js:
-
-```js
-// load the modern build
-var _ = require('lodash');
-// or a method category
-var array = require('lodash/array');
-// or a method (great for smaller builds with browserify/webpack)
-var chunk = require('lodash/array/chunk');
-```
-
-See the [package source](https://github.com/lodash/lodash/tree/3.10.1-npm) for more details.
-
-**Note:**<br>
-Don\u2019t assign values to the [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL.<br>
-Install [n_](https://www.npmjs.com/package/n_) for a REPL that includes lodash by default.
-
-## Module formats
-
-lodash is also available in a variety of other builds & module formats.
-
- * npm packages for [modern](https://www.npmjs.com/package/lodash), [compatibility](https://www.npmjs.com/package/lodash-compat), & [per method](https://www.npmjs.com/browse/keyword/lodash-modularized) builds
- * AMD modules for [modern](https://github.com/lodash/lodash/tree/3.10.1-amd) & [compatibility](https://github.com/lodash/lodash-compat/tree/3.10.1-amd) builds
- * ES modules for the [modern](https://github.com/lodash/lodash/tree/3.10.1-es) build
-
-## Further Reading
-
-  * [API Documentation](https://lodash.com/docs)
-  * [Build Differences](https://github.com/lodash/lodash/wiki/Build-Differences)
-  * [Changelog](https://github.com/lodash/lodash/wiki/Changelog)
-  * [Roadmap](https://github.com/lodash/lodash/wiki/Roadmap)
-  * [More Resources](https://github.com/lodash/lodash/wiki/Resources)
-
-## Features
-
- * ~100% [code coverage](https://coveralls.io/r/lodash)
- * Follows [semantic versioning](http://semver.org/) for releases
- * [Lazily evaluated](http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/) chaining
- * [_(\u2026)](https://lodash.com/docs#_) supports implicit chaining
- * [_.ary](https://lodash.com/docs#ary) & [_.rearg](https://lodash.com/docs#rearg) to change function argument limits & order
- * [_.at](https://lodash.com/docs#at) for cherry-picking collection values
- * [_.attempt](https://lodash.com/docs#attempt) to execute functions which may error without a try-catch
- * [_.before](https://lodash.com/docs#before) to complement [_.after](https://lodash.com/docs#after)
- * [_.bindKey](https://lodash.com/docs#bindKey) for binding [*\u201clazy\u201d*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods
- * [_.chunk](https://lodash.com/docs#chunk) for splitting an array into chunks of a given size
- * [_.clone](https://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects
- * [_.cloneDeep](https://lodash.com/docs#cloneDeep) for deep cloning arrays & objects
- * [_.curry](https://lodash.com/docs#curry) & [_.curryRight](https://lodash.com/docs#curryRight) for creating [curried](http://hughfdjackson.com/javascript/why-curry-helps/) functions
- * [_.debounce](https://lodash.com/docs#debounce) & [_.throttle](https://lodash.com/docs#throttle) are cancelable & accept options for more control
- * [_.defaultsDeep](https://lodash.com/docs#defaultsDeep) for recursively assigning default properties
- * [_.fill](https://lodash.com/docs#fill) to fill arrays with values
- * [_.findKey](https://lodash.com/docs#findKey) for finding keys
- * [_.flow](https://lodash.com/docs#flow) to complement [_.flowRight](https://lodash.com/docs#flowRight) (a.k.a `_.compose`)
- * [_.forEach](https://lodash.com/docs#forEach) supports exiting early
- * [_.forIn](https://lodash.com/docs#forIn) for iterating all enumerable properties
- * [_.forOwn](https://lodash.com/docs#forOwn) for iterating own properties
- * [_.get](https://lodash.com/docs#get) & [_.set](https://lodash.com/docs#set) for deep property getting & setting
- * [_.gt](https://lodash.com/docs#gt), [_.gte](https://lodash.com/docs#gte), [_.lt](https://lodash.com/docs#lt), & [_.lte](https://lodash.com/docs#lte) relational methods
- * [_.inRange](https://lodash.com/docs#inRange) for checking whether a number is within a given range
- * [_.isNative](https://lodash.com/docs#isNative) to check for native functions
- * [_.isPlainObject](https://lodash.com/docs#isPlainObject) & [_.toPlainObject](https://lodash.com/docs#toPlainObject) to check for & convert to `Object` objects
- * [_.isTypedArray](https://lodash.com/docs#isTypedArray) to check for typed arrays
- * [_.mapKeys](https://lodash.com/docs#mapKeys) for mapping keys to an object
- * [_.matches](https://lodash.com/docs#matches) supports deep object comparisons
- * [_.matchesProperty](https://lodash.com/docs#matchesProperty) to complement [_.matches](https://lodash.com/docs#matches) & [_.property](https://lodash.com/docs#property)
- * [_.merge](https://lodash.com/docs#merge) for a deep [_.extend](https://lodash.com/docs#extend)
- * [_.method](https://lodash.com/docs#method) & [_.methodOf](https://lodash.com/docs#methodOf) to create functions that invoke methods
- * [_.modArgs](https://lodash.com/docs#modArgs) for more advanced functional composition
- * [_.parseInt](https://lodash.com/docs#parseInt) for consistent cross-environment behavior
- * [_.pull](https://lodash.com/docs#pull), [_.pullAt](https://lodash.com/docs#pullAt), & [_.remove](https://lodash.com/docs#remove) for mutating arrays
- * [_.random](https://lodash.com/docs#random) supports returning floating-point numbers
- * [_.restParam](https://lodash.com/docs#restParam) & [_.spread](https://lodash.com/docs#spread) for applying rest parameters & spreading arguments to functions
- * [_.runInContext](https://lodash.com/docs#runInContext) for collisionless mixins & easier mocking
- * [_.slice](https://lodash.com/docs#slice) for creating subsets of array-like values
- * [_.sortByAll](https://lodash.com/docs#sortByAll) & [_.sortByOrder](https://lodash.com/docs#sortByOrder) for sorting by multiple properties & orders
- * [_.support](https://lodash.com/docs#support) for flagging environment features
- * [_.template](https://lodash.com/docs#template) supports [*\u201cimports\u201d*](https://lodash.com/docs#templateSettings-imports) options & [ES template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-template-literal-lexical-components)
- * [_.transform](https://lodash.com/docs#transform) as a powerful alternative to [_.reduce](https://lodash.com/docs#reduce) for transforming objects
- * [_.unzipWith](https://lodash.com/docs#unzipWith) & [_.zipWith](https://lodash.com/docs#zipWith) to specify how grouped values should be combined
- * [_.valuesIn](https://lodash.com/docs#valuesIn) for getting values of all enumerable properties
- * [_.xor](https://lodash.com/docs#xor) to complement [_.difference](https://lodash.com/docs#difference), [_.intersection](https://lodash.com/docs#intersection), & [_.union](https://lodash.com/docs#union)
- * [_.add](https://lodash.com/docs#add), [_.round](https://lodash.com/docs#round), [_.sum](https://lodash.com/docs#sum), &
-   [more](https://lodash.com/docs "_.ceil & _.floor") math methods
- * [_.bind](https://lodash.com/docs#bind), [_.curry](https://lodash.com/docs#curry), [_.partial](https://lodash.com/docs#partial), &
-   [more](https://lodash.com/docs "_.bindKey, _.curryRight, _.partialRight") support customizable argument placeholders
- * [_.capitalize](https://lodash.com/docs#capitalize), [_.trim](https://lodash.com/docs#trim), &
-   [more](https://lodash.com/docs "_.camelCase, _.deburr, _.endsWith, _.escapeRegExp, _.kebabCase, _.pad, _.padLeft, _.padRight, _.repeat, _.snakeCase, _.startCase, _.startsWith, _.trimLeft, _.trimRight, _.trunc, _.words") string methods
- * [_.clone](https://lodash.com/docs#clone), [_.isEqual](https://lodash.com/docs#isEqual), &
-   [more](https://lodash.com/docs "_.assign, _.cloneDeep, _.merge") accept customizer callbacks
- * [_.dropWhile](https://lodash.com/docs#dropWhile), [_.takeWhile](https://lodash.com/docs#takeWhile), &
-   [more](https://lodash.com/docs "_.drop, _.dropRight, _.dropRightWhile, _.take, _.takeRight, _.takeRightWhile") to complement [_.first](https://lodash.com/docs#first), [_.initial](https://lodash.com/docs#initial), [_.last](https://lodash.com/docs#last), & [_.rest](https://lodash.com/docs#rest)
- * [_.findLast](https://lodash.com/docs#findLast), [_.findLastKey](https://lodash.com/docs#findLastKey), &
-   [more](https://lodash.com/docs "_.curryRight, _.dropRight, _.dropRightWhile, _.flowRight, _.forEachRight, _.forInRight, _.forOwnRight, _.padRight, partialRight, _.takeRight, _.trimRight, _.takeRightWhile") right-associative methods
- * [_.includes](https://lodash.com/docs#includes), [_.toArray](https://lodash.com/docs#toArray), &
-   [more](https://lodash.com/docs "_.at, _.countBy, _.every, _.filter, _.find, _.findLast, _.findWhere, _.forEach, _.forEachRight, _.groupBy, _.indexBy, _.invoke, _.map, _.max, _.min, _.partition, _.pluck, _.reduce, _.reduceRight, _.reject, _.shuffle, _.size, _.some, _.sortBy, _.sortByAll, _.sortByOrder, _.sum, _.where") accept strings
- * [_#commit](https://lodash.com/docs#prototype-commit) & [_#plant](https://lodash.com/docs#prototype-plant) for working with chain sequences
- * [_#thru](https://lodash.com/docs#thru) to pass values thru a chain sequence
-
-## Support
-
-Tested in Chrome 43-44, Firefox 38-39, IE 6-11, MS Edge, Safari 5-8, ChakraNode 0.12.2, io.js 2.5.0, Node.js 0.8.28, 0.10.40, & 0.12.7, PhantomJS 1.9.8, RingoJS 0.11, & Rhino 1.7.6.
-Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. Special thanks to [Sauce Labs](https://saucelabs.com/) for providing automated browser testing.

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array.js b/node_modules/lodash/array.js
deleted file mode 100644
index e5121fa..0000000
--- a/node_modules/lodash/array.js
+++ /dev/null
@@ -1,44 +0,0 @@
-module.exports = {
-  'chunk': require('./array/chunk'),
-  'compact': require('./array/compact'),
-  'difference': require('./array/difference'),
-  'drop': require('./array/drop'),
-  'dropRight': require('./array/dropRight'),
-  'dropRightWhile': require('./array/dropRightWhile'),
-  'dropWhile': require('./array/dropWhile'),
-  'fill': require('./array/fill'),
-  'findIndex': require('./array/findIndex'),
-  'findLastIndex': require('./array/findLastIndex'),
-  'first': require('./array/first'),
-  'flatten': require('./array/flatten'),
-  'flattenDeep': require('./array/flattenDeep'),
-  'head': require('./array/head'),
-  'indexOf': require('./array/indexOf'),
-  'initial': require('./array/initial'),
-  'intersection': require('./array/intersection'),
-  'last': require('./array/last'),
-  'lastIndexOf': require('./array/lastIndexOf'),
-  'object': require('./array/object'),
-  'pull': require('./array/pull'),
-  'pullAt': require('./array/pullAt'),
-  'remove': require('./array/remove'),
-  'rest': require('./array/rest'),
-  'slice': require('./array/slice'),
-  'sortedIndex': require('./array/sortedIndex'),
-  'sortedLastIndex': require('./array/sortedLastIndex'),
-  'tail': require('./array/tail'),
-  'take': require('./array/take'),
-  'takeRight': require('./array/takeRight'),
-  'takeRightWhile': require('./array/takeRightWhile'),
-  'takeWhile': require('./array/takeWhile'),
-  'union': require('./array/union'),
-  'uniq': require('./array/uniq'),
-  'unique': require('./array/unique'),
-  'unzip': require('./array/unzip'),
-  'unzipWith': require('./array/unzipWith'),
-  'without': require('./array/without'),
-  'xor': require('./array/xor'),
-  'zip': require('./array/zip'),
-  'zipObject': require('./array/zipObject'),
-  'zipWith': require('./array/zipWith')
-};

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/chunk.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/chunk.js b/node_modules/lodash/array/chunk.js
deleted file mode 100644
index c8be1fb..0000000
--- a/node_modules/lodash/array/chunk.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var baseSlice = require('../internal/baseSlice'),
-    isIterateeCall = require('../internal/isIterateeCall');
-
-/* Native method references for those with the same name as other `lodash` methods. */
-var nativeCeil = Math.ceil,
-    nativeFloor = Math.floor,
-    nativeMax = Math.max;
-
-/**
- * Creates an array of elements split into groups the length of `size`.
- * If `collection` can't be split evenly, the final chunk will be the remaining
- * elements.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to process.
- * @param {number} [size=1] The length of each chunk.
- * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
- * @returns {Array} Returns the new array containing chunks.
- * @example
- *
- * _.chunk(['a', 'b', 'c', 'd'], 2);
- * // => [['a', 'b'], ['c', 'd']]
- *
- * _.chunk(['a', 'b', 'c', 'd'], 3);
- * // => [['a', 'b', 'c'], ['d']]
- */
-function chunk(array, size, guard) {
-  if (guard ? isIterateeCall(array, size, guard) : size == null) {
-    size = 1;
-  } else {
-    size = nativeMax(nativeFloor(size) || 1, 1);
-  }
-  var index = 0,
-      length = array ? array.length : 0,
-      resIndex = -1,
-      result = Array(nativeCeil(length / size));
-
-  while (index < length) {
-    result[++resIndex] = baseSlice(array, index, (index += size));
-  }
-  return result;
-}
-
-module.exports = chunk;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/compact.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/compact.js b/node_modules/lodash/array/compact.js
deleted file mode 100644
index 1dc1c55..0000000
--- a/node_modules/lodash/array/compact.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Creates an array with all falsey values removed. The values `false`, `null`,
- * `0`, `""`, `undefined`, and `NaN` are falsey.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to compact.
- * @returns {Array} Returns the new array of filtered values.
- * @example
- *
- * _.compact([0, 1, false, 2, '', 3]);
- * // => [1, 2, 3]
- */
-function compact(array) {
-  var index = -1,
-      length = array ? array.length : 0,
-      resIndex = -1,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value) {
-      result[++resIndex] = value;
-    }
-  }
-  return result;
-}
-
-module.exports = compact;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/difference.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/difference.js b/node_modules/lodash/array/difference.js
deleted file mode 100644
index 128932a..0000000
--- a/node_modules/lodash/array/difference.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var baseDifference = require('../internal/baseDifference'),
-    baseFlatten = require('../internal/baseFlatten'),
-    isArrayLike = require('../internal/isArrayLike'),
-    isObjectLike = require('../internal/isObjectLike'),
-    restParam = require('../function/restParam');
-
-/**
- * Creates an array of unique `array` values not included in the other
- * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
- * for equality comparisons.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to inspect.
- * @param {...Array} [values] The arrays of values to exclude.
- * @returns {Array} Returns the new array of filtered values.
- * @example
- *
- * _.difference([1, 2, 3], [4, 2]);
- * // => [1, 3]
- */
-var difference = restParam(function(array, values) {
-  return (isObjectLike(array) && isArrayLike(array))
-    ? baseDifference(array, baseFlatten(values, false, true))
-    : [];
-});
-
-module.exports = difference;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/drop.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/drop.js b/node_modules/lodash/array/drop.js
deleted file mode 100644
index 039a0b5..0000000
--- a/node_modules/lodash/array/drop.js
+++ /dev/null
@@ -1,39 +0,0 @@
-var baseSlice = require('../internal/baseSlice'),
-    isIterateeCall = require('../internal/isIterateeCall');
-
-/**
- * Creates a slice of `array` with `n` elements dropped from the beginning.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to query.
- * @param {number} [n=1] The number of elements to drop.
- * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
- * @returns {Array} Returns the slice of `array`.
- * @example
- *
- * _.drop([1, 2, 3]);
- * // => [2, 3]
- *
- * _.drop([1, 2, 3], 2);
- * // => [3]
- *
- * _.drop([1, 2, 3], 5);
- * // => []
- *
- * _.drop([1, 2, 3], 0);
- * // => [1, 2, 3]
- */
-function drop(array, n, guard) {
-  var length = array ? array.length : 0;
-  if (!length) {
-    return [];
-  }
-  if (guard ? isIterateeCall(array, n, guard) : n == null) {
-    n = 1;
-  }
-  return baseSlice(array, n < 0 ? 0 : n);
-}
-
-module.exports = drop;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/dropRight.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/dropRight.js b/node_modules/lodash/array/dropRight.js
deleted file mode 100644
index 14b5eb6..0000000
--- a/node_modules/lodash/array/dropRight.js
+++ /dev/null
@@ -1,40 +0,0 @@
-var baseSlice = require('../internal/baseSlice'),
-    isIterateeCall = require('../internal/isIterateeCall');
-
-/**
- * Creates a slice of `array` with `n` elements dropped from the end.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to query.
- * @param {number} [n=1] The number of elements to drop.
- * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
- * @returns {Array} Returns the slice of `array`.
- * @example
- *
- * _.dropRight([1, 2, 3]);
- * // => [1, 2]
- *
- * _.dropRight([1, 2, 3], 2);
- * // => [1]
- *
- * _.dropRight([1, 2, 3], 5);
- * // => []
- *
- * _.dropRight([1, 2, 3], 0);
- * // => [1, 2, 3]
- */
-function dropRight(array, n, guard) {
-  var length = array ? array.length : 0;
-  if (!length) {
-    return [];
-  }
-  if (guard ? isIterateeCall(array, n, guard) : n == null) {
-    n = 1;
-  }
-  n = length - (+n || 0);
-  return baseSlice(array, 0, n < 0 ? 0 : n);
-}
-
-module.exports = dropRight;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/dropRightWhile.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/dropRightWhile.js b/node_modules/lodash/array/dropRightWhile.js
deleted file mode 100644
index be158bd..0000000
--- a/node_modules/lodash/array/dropRightWhile.js
+++ /dev/null
@@ -1,59 +0,0 @@
-var baseCallback = require('../internal/baseCallback'),
-    baseWhile = require('../internal/baseWhile');
-
-/**
- * Creates a slice of `array` excluding elements dropped from the end.
- * Elements are dropped until `predicate` returns falsey. The predicate is
- * bound to `thisArg` and invoked with three arguments: (value, index, array).
- *
- * If a property name is provided for `predicate` the created `_.property`
- * style callback returns the property value of the given element.
- *
- * If a value is also provided for `thisArg` the created `_.matchesProperty`
- * style callback returns `true` for elements that have a matching property
- * value, else `false`.
- *
- * If an object is provided for `predicate` the created `_.matches` style
- * callback returns `true` for elements that match the properties of the given
- * object, else `false`.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to query.
- * @param {Function|Object|string} [predicate=_.identity] The function invoked
- *  per iteration.
- * @param {*} [thisArg] The `this` binding of `predicate`.
- * @returns {Array} Returns the slice of `array`.
- * @example
- *
- * _.dropRightWhile([1, 2, 3], function(n) {
- *   return n > 1;
- * });
- * // => [1]
- *
- * var users = [
- *   { 'user': 'barney',  'active': true },
- *   { 'user': 'fred',    'active': false },
- *   { 'user': 'pebbles', 'active': false }
- * ];
- *
- * // using the `_.matches` callback shorthand
- * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
- * // => ['barney', 'fred']
- *
- * // using the `_.matchesProperty` callback shorthand
- * _.pluck(_.dropRightWhile(users, 'active', false), 'user');
- * // => ['barney']
- *
- * // using the `_.property` callback shorthand
- * _.pluck(_.dropRightWhile(users, 'active'), 'user');
- * // => ['barney', 'fred', 'pebbles']
- */
-function dropRightWhile(array, predicate, thisArg) {
-  return (array && array.length)
-    ? baseWhile(array, baseCallback(predicate, thisArg, 3), true, true)
-    : [];
-}
-
-module.exports = dropRightWhile;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/dropWhile.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/dropWhile.js b/node_modules/lodash/array/dropWhile.js
deleted file mode 100644
index d9eabae..0000000
--- a/node_modules/lodash/array/dropWhile.js
+++ /dev/null
@@ -1,59 +0,0 @@
-var baseCallback = require('../internal/baseCallback'),
-    baseWhile = require('../internal/baseWhile');
-
-/**
- * Creates a slice of `array` excluding elements dropped from the beginning.
- * Elements are dropped until `predicate` returns falsey. The predicate is
- * bound to `thisArg` and invoked with three arguments: (value, index, array).
- *
- * If a property name is provided for `predicate` the created `_.property`
- * style callback returns the property value of the given element.
- *
- * If a value is also provided for `thisArg` the created `_.matchesProperty`
- * style callback returns `true` for elements that have a matching property
- * value, else `false`.
- *
- * If an object is provided for `predicate` the created `_.matches` style
- * callback returns `true` for elements that have the properties of the given
- * object, else `false`.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to query.
- * @param {Function|Object|string} [predicate=_.identity] The function invoked
- *  per iteration.
- * @param {*} [thisArg] The `this` binding of `predicate`.
- * @returns {Array} Returns the slice of `array`.
- * @example
- *
- * _.dropWhile([1, 2, 3], function(n) {
- *   return n < 3;
- * });
- * // => [3]
- *
- * var users = [
- *   { 'user': 'barney',  'active': false },
- *   { 'user': 'fred',    'active': false },
- *   { 'user': 'pebbles', 'active': true }
- * ];
- *
- * // using the `_.matches` callback shorthand
- * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
- * // => ['fred', 'pebbles']
- *
- * // using the `_.matchesProperty` callback shorthand
- * _.pluck(_.dropWhile(users, 'active', false), 'user');
- * // => ['pebbles']
- *
- * // using the `_.property` callback shorthand
- * _.pluck(_.dropWhile(users, 'active'), 'user');
- * // => ['barney', 'fred', 'pebbles']
- */
-function dropWhile(array, predicate, thisArg) {
-  return (array && array.length)
-    ? baseWhile(array, baseCallback(predicate, thisArg, 3), true)
-    : [];
-}
-
-module.exports = dropWhile;

http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/222e5797/node_modules/lodash/array/fill.js
----------------------------------------------------------------------
diff --git a/node_modules/lodash/array/fill.js b/node_modules/lodash/array/fill.js
deleted file mode 100644
index 2c8f6da..0000000
--- a/node_modules/lodash/array/fill.js
+++ /dev/null
@@ -1,44 +0,0 @@
-var baseFill = require('../internal/baseFill'),
-    isIterateeCall = require('../internal/isIterateeCall');
-
-/**
- * Fills elements of `array` with `value` from `start` up to, but not
- * including, `end`.
- *
- * **Note:** This method mutates `array`.
- *
- * @static
- * @memberOf _
- * @category Array
- * @param {Array} array The array to fill.
- * @param {*} value The value to fill `array` with.
- * @param {number} [start=0] The start position.
- * @param {number} [end=array.length] The end position.
- * @returns {Array} Returns `array`.
- * @example
- *
- * var array = [1, 2, 3];
- *
- * _.fill(array, 'a');
- * console.log(array);
- * // => ['a', 'a', 'a']
- *
- * _.fill(Array(3), 2);
- * // => [2, 2, 2]
- *
- * _.fill([4, 6, 8], '*', 1, 2);
- * // => [4, '*', 8]
- */
-function fill(array, value, start, end) {
-  var length = array ? array.length : 0;
-  if (!length) {
-    return [];
-  }
-  if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
-    start = 0;
-    end = length;
-  }
-  return baseFill(array, value, start, end);
-}
-
-module.exports = fill;


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