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

[33/91] [abbrv] never ever check in node modules. baaad.

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/lib/tap-cov-html.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/lib/tap-cov-html.js b/node_modules/nodeunit/node_modules/tap/lib/tap-cov-html.js
deleted file mode 100644
index 3c1c192..0000000
--- a/node_modules/nodeunit/node_modules/tap/lib/tap-cov-html.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var fs = require('fs'),
-    path = require('path'),
-    asyncMap = require("slide").asyncMap,
-    util = require('util');
-
-var CovHtml = module.exports = function(cov_stats, cov_dir, cb) {
-  var index = [];
-
-  asyncMap(
-    Object.keys(cov_stats),
-    function(f, cb) {
-      var st = cov_stats[f],
-          missing_lines = st.missing.map(function(l) {
-            return l.number;
-          }),
-          out = '<!doctype html>\n<html lang="en">\n<head>\n  ' +
-                '<meta charset="utf-8">\n  <title>' +
-
-      f + ' (' + st.loc + ')</title>\n' +
-      '<style type="text/css">\n' + 
-      'li {\n' +
-      '  font-family: monospace;\n' +
-      '  white-space: pre;\n' +
-      '}\n' +
-      '</style>\n' +
-      '</head>\n<body>\n' +
-      '<h1>' + f + ' (' + st.loc + ')' + '</h1>' +
-      '<h2>Run: ' + (st.missing.length ? st.loc - st.missing.length : st.loc) + ', Missing: ' +
-      st.missing.length + ', Percentage: ' + st.percentage + '</h2>' +
-      '<h2>Source:</h2>\n' +
-      '<ol>\n' + 
-      st.lines.map(function(line) {
-        var number = line.number,
-            color = (missing_lines.indexOf(number) !== -1) ? '#fcc' : '#cfc';
-        return '<li id="L' + line.number + '" style="background-color: ' + color +
-               ';">' + line.source.replace(/</g, "&lt;") + '</li>';
-      }).join('\n') + 
-      '</ol>\n' +
-      '<h2>Data</h2>\n'+
-      '<pre>' + util.inspect(st, true, Infinity, false).replace(/</g, "&lt;") + '</pre></body>\n</html>';
-
-      fs.writeFile(
-        cov_dir + '/' + 
-        f.replace(process.cwd() + '/', '').replace(/\//g, '+') + '.html',
-        out,
-        'utf8',
-        function(err) {
-          if (err) {
-            throw err;
-          }
-          index.push(f);
-          cb();
-        });
-    },
-    function(err) {
-      if (err) {
-        throw err;
-      }
-      var out = '<!doctype html>\n<html lang="en">\n<head>\n  ' +
-          '<meta charset="utf-8">\n  <title>Coverage Index</title>\n</head>\n' +
-          '<body>\n<h1>Code Coverage Information</h1>\n<ul>' +
-          index.map(function(fname) {
-            return '<li><a href="' +
-            fname.replace(process.cwd() + '/', '').replace(/\//g, '+') + '.html' +
-            '">' + fname + '</a></li>';
-          }).join('\n') + '</ul>\n</body>\n</html>';
-
-      fs.writeFile(cov_dir + '/index.html', out, 'utf8', function(err) {
-        if (err) {
-          throw err;
-        }
-        cb();
-      });   
-    }
-  );
-};
-
-

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/lib/tap-global-harness.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/lib/tap-global-harness.js b/node_modules/nodeunit/node_modules/tap/lib/tap-global-harness.js
deleted file mode 100644
index 0bcb3a4..0000000
--- a/node_modules/nodeunit/node_modules/tap/lib/tap-global-harness.js
+++ /dev/null
@@ -1,68 +0,0 @@
-// this is just a harness that pipes to stdout.
-// It's the default one.
-module.exports = GlobalHarness
-
-var globalHarness = global.TAP_Global_Harness
-  , inherits = require("inherits")
-  , Results = require("./tap-results")
-  , Harness = require("./tap-harness")
-  , Test = require("./tap-test")
-
-inherits(GlobalHarness, Harness)
-function GlobalHarness () {
-  //console.error("calling GlobalHarness")
-  if (globalHarness) return globalHarness
-  if (!(this instanceof GlobalHarness)) {
-    return globalHarness = new GlobalHarness
-  }
-
-  globalHarness = global.TAP_Global_Harness = this
-  GlobalHarness.super.call(this, Test)
-
-  this.output.pipe(process.stdout)
-  //this.output.on("data", function () {
-  //  process.nextTick(process.stdout.flush.bind(process.stdout))
-  //})
-
-  this.test = this.test.bind(this)
-
-  this.plan = this.plan.bind(this)
-
-  var output = this.output
-  this.on("childEnd", function (child) {
-    //console.error("childEnd in global harness")
-    //console.error(child.results)
-    // write out the stuff for this child.
-    //console.error("child.conf", child.conf)
-    output.write(child.conf.name || "(unnamed test)")
-    // maybe write some other stuff about the number of tests in this
-    // thing, etc.  I dunno.
-    //console.error("child results", child.results)
-    this.results.list.forEach(function (res) {
-      //delete res.error
-      //console.error("child resuilt", res)
-      output.write(res)
-    })
-    //console.error("wrote child results")
-    this.results.list.length = 0
-  })
-
-  var streamEnded = false
-  this.on("end", function () {
-    //console.error("global ending the stream")
-    if (!streamEnded) {
-      this.results.list.forEach(function (res) {
-        output.write(res)
-      })
-      this.results.list.length = 0
-      output.end()
-      streamEnded = true
-    }
-  })
-
-  //this.on("end", this.output.end.bind(this.output))
-
-  process.on("unhandledException", function (e) {
-    this.bailout("unhandled exception: " + e.message)
-  })
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/lib/tap-harness.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/lib/tap-harness.js b/node_modules/nodeunit/node_modules/tap/lib/tap-harness.js
deleted file mode 100644
index b56e567..0000000
--- a/node_modules/nodeunit/node_modules/tap/lib/tap-harness.js
+++ /dev/null
@@ -1,221 +0,0 @@
-// a thing that runs tests.
-// Every "test" is also a harness.  If they do not have a harness,
-// then they are attached to the defaut "global harness",
-// which writes its results to stdout.
-
-
-// TODO:
-// - Bailout should stop running any tests.
-// - "skip" in the test config obj should skip it.
-
-module.exports = Harness
-require("inherits")(Harness, require("events").EventEmitter)
-
-var Results = require("./tap-results")
-  , TapProducer = require("./tap-producer")
-  , assert = require("./tap-assert")
-
-function Harness (Test) {
-  if (!(this instanceof Harness)) return new Harness(Test)
-
-  //console.error("Test in "+this.constructor.name, Test)
-
-  this._Test = Test
-  this._plan = null
-  this._children = []
-  this._started = false
-
-  this._testCount = 0
-  this._planSum = 0
-
-  this.results = new Results()
-  // emit result events on the harness.
-  //this.results.on("result", function (res) {
-  //  console.error("proxying result ev from res to harness")
-  //  this.emit("result", res)
-  //}.bind(this))
-  var me = this
-  this.results.on("result", this.emit.bind(this, "result"))
-
-  var p = this.process.bind(this)
-  this.process = function () {
-    this._started = true
-    process.nextTick(p)
-  }
-
-  this.output = new TapProducer()
-  Harness.super.call(this)
-}
-
-// this function actually only gets called bound to
-// the Harness object, and on process.nextTick.  Even if
-// passed as an event handler, everything *else* will
-// happen before it gets called.
-Harness.prototype.process = function () {
-  //console.error("harness process")
-  // "end" can emit multiple times, so only actually move on
-  // to the next test if the current one is actually over.
-  // TODO: multiple in-process tests, if all are marked "async"
-  if (this._current) {
-    if (!this._current._ended) return
-    // handle the current one before moving onto the next.
-    this.childEnd(this._current)
-  }
-  var skip = true
-  while (skip) {
-    //console.error("checking for skips")
-    var current = this._current = this._children.shift()
-    if (current) {
-      skip = current.conf.skip
-      if (skip) {
-        //console.error("add a failure for the skipping")
-        this.results.add(assert.fail(current.conf.name
-                                    ,{skip:true, diag:false}))
-      }
-    } else skip = false
-  }
-
-  // keep processing through skipped tests, instead of running them.
-  if (current && this._bailedOut) {
-    return this.process()
-  }
-
-  //console.error("got current?", !!current)
-  if (current) {
-    current.on("end", this.process)
-    current.emit("ready")
-    //console.error("emitted ready")
-    //console.error("_plan", this._plan, this.constructor.name)
-  } else {
-    //console.error("Harness process: no more left.  ending")
-    if (this._endNice) {
-      this._endNice()
-    } else {
-      this.end()
-    }
-  }
-}
-
-Harness.prototype.end = function () {
-  if (this._children.length) {
-    return this.process()
-  }
-  //console.error("harness end", this.constructor.name)
-  if (this._bailedOut) return
-
-  // can't call .end() more than once.
-  if (this._ended) {
-    //console.error("adding failure for end calling")
-    this.results.add(assert.fail("end called more than once"))
-  }
-
-  // see if the plan is completed properly, if there was one.
-  if (this._plan !== null) {
-    var total = this._testCount
-    if (total !== this._plan) {
-      this.results.add(assert.equal(total, this._plan, "test count != plan"))
-    }
-    this._plan = total
-  }
-
-  //console.error("setting ended true", this.constructor.name)
-  this._ended = true
-  this.emit("end")
-}
-
-Harness.prototype.plan = function (p) {
-  //console.error("setting plan", new Error().stack)
-  if (this._plan !== null) {
-    //console.error("about to add failure for calling plan")
-    return this.results.add(assert.fail("plan set multiple times"))
-  }
-  this._plan = p
-  if (p === 0 || this.results.testsTotal) {
-    this.end()
-  }
-}
-
-Harness.prototype.childEnd = function (child) {
-  //console.error("childEnd")
-  this._testCount ++
-  this._planSum += child._plan
-  //console.error("adding set of child.results")
-  this.results.addSet(child.results)
-  this.emit("childEnd", child)
-  // was this planned?
-  if (this._plan === this._testCount) {
-    //console.error("plan", [this._plan, this._testCount])
-    return this.end()
-  }
-}
-
-function copyObj(o) {
-  var copied = {}
-  Object.keys(o).forEach(function (k) { copied[k] = o[k] })
-  return copied
-}
-
-Harness.prototype.test = function test (name, conf, cb) {
-  if (this._bailedOut) return
-
-  if (typeof conf === "function") cb = conf, conf = null
-  if (typeof name === "object") conf = name, name = null
-  if (typeof name === "function") cb = name, name = null
-
-  conf = (conf ? copyObj(conf) : {})
-  name = name || ""
-
-  //console.error("making test", [name, conf, cb])
-
-  // timeout: value in milliseconds. Defaults to 30s
-  // Set to Infinity to have no timeout.
-  if (isNaN(conf.timeout)) conf.timeout = 30000
-  var t = new this._Test(this, name, conf)
-  var self = this
-  if (cb) {
-    //console.error("attaching cb to ready event")
-    t.on("ready", function () {
-      if (!isNaN(conf.timeout) && isFinite(conf.timeout)) {
-        var timer = setTimeout(this.timeout.bind(this), conf.timeout)
-        var clear = function () {
-          clearTimeout(timer)
-        }
-        t.on("end", clear)
-        t.on("bailout", function (message) {
-          self.bailout(message)
-          clear()
-        })
-      }
-    })
-    t.on("ready", cb.bind(t, t))
-    // proxy the child results to this object.
-    //t.on("result", function (res) {
-    //  console.error("in harness, proxying result up")
-    //  t.results.add(res)
-    //})
-  }
-  return t
-}
-
-Harness.prototype.bailout = function (message) {
-  // console.error("Harness bailout", this.constructor.name)
-  message = message || ""
-  //console.error("adding bailout message result")
-  this.results.add({bailout: message})
-  // console.error(">>> results after bailout" , this.results)
-  this._bailedOut = true
-  this.emit("bailout", message)
-  this.output.end({bailout: message})
-}
-
-Harness.prototype.add = function (child) {
-  //console.error("adding child")
-  this._children.push(child)
-  if (!this._started) this.process()
-}
-
-// the tearDown function is *always* guaranteed to happen.
-// Even if there's a bailout.
-Harness.prototype.tearDown = function (fn) {
-  this.on("end", fn)
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/lib/tap-producer.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/lib/tap-producer.js b/node_modules/nodeunit/node_modules/tap/lib/tap-producer.js
deleted file mode 100644
index c6593a9..0000000
--- a/node_modules/nodeunit/node_modules/tap/lib/tap-producer.js
+++ /dev/null
@@ -1,130 +0,0 @@
-module.exports = TapProducer
-
-var Results = require("./tap-results")
-  , inherits = require("inherits")
-  , yamlish = require("yamlish")
-
-TapProducer.encode = function (result, diag) {
-  var tp = new TapProducer(diag)
-    , out = ""
-  tp.on("data", function (c) { out += c })
-  if (Array.isArray(result)) {
-    result.forEach(tp.write, tp)
-  } else tp.write(result)
-  tp.end()
-  return out
-}
-
-inherits(TapProducer, require("stream").Stream)
-function TapProducer (diag) {
-  TapProducer.super.call(this)
-  this.diag = diag
-  this.count = 0
-  this.readable = this.writable = true
-  this.results = new Results
-}
-
-TapProducer.prototype.trailer = true
-
-TapProducer.prototype.write = function (res) {
-  // console.error("TapProducer.write", res)
-  if (typeof res === "function") throw new Error("wtf?")
-  if (!this.writable) this.emit("error", new Error("not writable"))
-
-  if (!this._didHead) {
-    this.emit("data", "TAP version 13\n")
-    this._didHead = true
-  }
-
-  var diag = res.diag
-  if (diag === undefined) diag = this.diag
-
-  this.emit("data", encodeResult(res, this.count + 1, diag))
-
-  if (typeof res === "string") return true
-
-  if (res.bailout) {
-    var bo = "bail out!"
-    if (typeof res.bailout === "string") bo += " " + res.bailout
-    this.emit("data", bo)
-    return
-  }
-  this.results.add(res, false)
-
-  this.count ++
-}
-
-TapProducer.prototype.end = function (res) {
-  if (res) this.write(res)
-  // console.error("TapProducer end", res, this.results)
-  this.emit("data", "\n1.."+this.results.testsTotal+"\n")
-  if (this.trailer && typeof this.trailer !== "string") {
-    // summary trailer.
-    var trailer = "tests "+this.results.testsTotal + "\n"
-    if (this.results.pass) {
-      trailer += "pass  " + this.results.pass + "\n"
-    }
-    if (this.results.fail) {
-      trailer += "fail  " + this.results.fail + "\n"
-    }
-    if (this.results.skip) {
-      trailer += "skip  "+this.results.skip + "\n"
-    }
-    if (this.results.todo) {
-      trailer += "todo  "+this.results.todo + "\n"
-    }
-    if (this.results.bailedOut) {
-      trailer += "bailed out" + "\n"
-    }
-
-    if (this.results.testsTotal === this.results.pass) {
-      trailer += "\nok\n"
-    }
-    this.trailer = trailer
-  }
-  if (this.trailer) this.write(this.trailer)
-  this.writable = false
-  this.emit("end", null, this.count, this.ok)
-}
-
-function encodeResult (res, count, diag) {
-  // console.error(res, count, diag)
-  if (typeof res === "string") {
-    res = res.split(/\r?\n/).map(function (l) {
-      if (!l.trim()) return l.trim()
-      return "# " + l
-    }).join("\n")
-    if (res.substr(-1) !== "\n") res += "\n"
-    return res
-  }
-
-  if (res.bailout) return ""
-
-
-  if (!!process.env.TAP_NODIAG) diag = false
-  else if (!!process.env.TAP_DIAG) diag = true
-  else if (diag === undefined) diag = !res.ok
-
-  var output = ""
-  res.name = res.name && ("" + res.name).trim()
-  output += ( !res.ok ? "not " : "") + "ok " + count
-            + ( !res.name ? ""
-              : " " + res.name.replace(/[\r\n]/g, " ") )
-            + ( res.skip ? " # SKIP"
-              : res.todo ? " # TODO"
-              : "" )
-            + "\n"
-
-  if (!diag) return output
-  var d = {}
-    , dc = 0
-  Object.keys(res).filter(function (k) {
-    return k !== "ok" && k !== "name" && k !== "id"
-  }).forEach(function (k) {
-    dc ++
-    d[k] = res[k]
-  })
-  //console.error(d, "about to encode")
-  if (dc > 0) output += "  ---"+yamlish.encode(d)+"\n  ...\n"
-  return output
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/lib/tap-results.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/lib/tap-results.js b/node_modules/nodeunit/node_modules/tap/lib/tap-results.js
deleted file mode 100644
index 6fe90e8..0000000
--- a/node_modules/nodeunit/node_modules/tap/lib/tap-results.js
+++ /dev/null
@@ -1,71 +0,0 @@
-// A class for counting up results in a test harness.
-
-module.exports = Results
-
-var inherits = require("inherits")
-  , EventEmitter = require("events").EventEmitter
-
-inherits(Results, EventEmitter)
-
-function Results (r) {
-  //console.error("result constructor", r)
-  this.ok = true
-  this.addSet(r)
-}
-
-Results.prototype.addSet = function (r) {
-  //console.error("add set of results", r)
-  r = r || {ok: true}
-  ; [ "todo"
-    , "todoPass"
-    , "todoFail"
-    , "skip"
-    , "skipPass"
-    , "skipFail"
-    , "pass"
-    , "passTotal"
-    , "fail"
-    , "failTotal"
-    , "tests"
-    , "testsTotal" ].forEach(function (k) {
-      this[k] = (this[k] || 0) + (r[k] || 0)
-      //console.error([k, this[k]])
-    }, this)
-
-  this.ok = this.ok && r.ok && true
-  this.bailedOut = this.bailedOut || r.bailedOut || false
-  this.list = (this.list || []).concat(r.list || [])
-  this.emit("set", this.list)
-  //console.error("after addSet", this)
-}
-
-Results.prototype.add = function (r, addToList) {
-  //console.error("add result", r)
-  var pf = r.ok ? "pass" : "fail"
-    , PF = r.ok ? "Pass" : "Fail"
-
-  this.testsTotal ++
-  this[pf + "Total"] ++
-
-  if (r.skip) {
-    this["skip" + PF] ++
-    this.skip ++
-  } else if (r.todo) {
-    this["todo" + PF] ++
-    this.todo ++
-  } else {
-    this.tests ++
-    this[pf] ++
-  }
-
-  if (r.bailout || typeof r.bailout === "string") {
-    // console.error("Bailing out in result")
-    this.bailedOut = true
-  }
-  this.ok = !!(this.ok && r.ok)
-
-  if (addToList === false) return
-  this.list = this.list || []
-  this.list.push(r)
-  this.emit("result", r)
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/lib/tap-runner.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/lib/tap-runner.js b/node_modules/nodeunit/node_modules/tap/lib/tap-runner.js
deleted file mode 100644
index 285772f..0000000
--- a/node_modules/nodeunit/node_modules/tap/lib/tap-runner.js
+++ /dev/null
@@ -1,453 +0,0 @@
-var fs = require("fs")
-  , child_process = require("child_process")
-  , path = require("path")
-  , chain = require("slide").chain
-  , asyncMap = require("slide").asyncMap
-  , TapProducer = require("./tap-producer.js")
-  , TapConsumer = require("./tap-consumer.js")
-  , assert = require("./tap-assert.js")
-  , inherits = require("inherits")
-  , util = require("util")
-  , CovHtml = require("./tap-cov-html.js")
-
-  // XXX Clean up the coverage options
-  , doCoverage = process.env.TAP_COV
-               || process.env.npm_package_config_coverage
-               || process.env.npm_config_coverage
-
-module.exports = Runner
-
-inherits(Runner, TapProducer)
-
-function Runner (options, cb) {
-  this.options = options
-
-  var diag = this.options.diag
-  var dir = this.options.argv.remain
-  Runner.super.call(this, diag)
-
-  this.doCoverage = doCoverage
-  // An array of full paths to files to obtain coverage
-  this.coverageFiles = []
-  // The source of these files
-  this.coverageFilesSource = {}
-  // Where to write coverage information
-  this.coverageOutDir = this.options["coverage-dir"]
-  // Temporary test files bunkerified we'll remove later
-  this.f2delete = []
-  // Raw coverage stats, as read from JSON files
-  this.rawCovStats = []
-  // Processed coverage information, per file to cover:
-  this.covStats = {}
-
-  if (dir) {
-    var filesToCover = this.options.cover
-
-    if (doCoverage) {
-      var mkdirp = require("mkdirp")
-      this.coverageOutDir = path.resolve(this.coverageOutDir)
-      this.getFilesToCover(filesToCover)
-      var self = this
-      return mkdirp(this.coverageOutDir, 0755, function (er) {
-        if (er) return self.emit("error", er)
-        self.run(dir, cb)
-      })
-    }
-
-    this.run(dir, cb)
-  }
-}
-
-
-Runner.prototype.run = function() {
-  var self = this
-    , args = Array.prototype.slice.call(arguments)
-    , cb = args.pop() || finish
-
-  function finish (er) {
-    if (er) {
-      self.emit("error", er)
-    }
-
-    if (!doCoverage) return self.end()
-
-    // Cleanup temporary test files with coverage:
-    self.f2delete.forEach(function(f) {
-      fs.unlinkSync(f)
-    })
-    self.getFilesToCoverSource(function(err, data) {
-      if (err) {
-        self.emit("error", err)
-      }
-      self.getPerFileCovInfo(function(err, data) {
-        if (err) {
-          self.emit("error", err)
-        }
-        self.mergeCovStats(function(err, data) {
-          if (err) {
-            self.emit("error", err)
-          }
-          CovHtml(self.covStats, self.coverageOutDir, function() {
-            self.end()
-          })
-        })
-      })
-    })
-  }
-
-  if (Array.isArray(args[0])) {
-    args = args[0]
-  }
-  self.runFiles(args, "", cb)
-}
-
-Runner.prototype.runDir = function (dir, cb) {
-  var self = this
-  fs.readdir(dir, function (er, files) {
-    if (er) {
-      self.write(assert.fail("failed to readdir " + dir, { error: er }))
-      self.end()
-      return
-    }
-    files = files.sort(function(a, b) {
-      return a > b ? 1 : -1
-    })
-    files = files.filter(function(f) {
-      return !f.match(/^\./)
-    })
-    files = files.map(path.resolve.bind(path, dir))
-
-    self.runFiles(files, path.resolve(dir), cb)
-  })
-}
-
-
-Runner.prototype.runFiles = function (files, dir, cb) {
-
-  var self = this
-  chain(files.map(function(f) {
-    return function (cb) {
-      if (self._bailedOut) return
-      var relDir = dir || path.dirname(f)
-        , fileName = relDir === "." ? f : f.substr(relDir.length + 1)
-
-      self.write(fileName)
-      fs.lstat(f, function(er, st) {
-        if (er) {
-          self.write(assert.fail("failed to stat " + f, {error: er}))
-          return cb()
-        }
-
-        var cmd = f, args = [], env = {}
-
-        if (path.extname(f) === ".js") {
-          cmd = "node"
-          if (self.options.gc) {
-            args.push("--expose-gc")
-          }
-          args.push(fileName)
-        } else if (path.extname(f) === ".coffee") {
-          cmd = "coffee"
-          args.push(fileName)
-        } else {
-          // Check if file is executable
-          if ((st.mode & 0100) && process.getuid) {
-            if (process.getuid() != st.uid) {
-              return cb()
-            }
-          } else if ((st.mode & 0010) && process.getgid) {
-            if (process.getgid() != st.gid) {
-              return cb()
-            }
-          } else if ((st.mode & 0001) == 0) {
-            return cb()
-          }
-        }
-
-        if (st.isDirectory()) {
-          return self.runDir(f, cb)
-        }
-
-        if (doCoverage && path.extname(f) === ".js") {
-          var foriginal = fs.readFileSync(f, "utf8")
-            , fcontents = self.coverHeader() + foriginal + self.coverFooter()
-            , tmpBaseName = path.basename(f, path.extname(f))
-                          + ".with-coverage." + process.pid + path.extname(f)
-            , tmpFname = path.resolve(path.dirname(f), tmpBaseName)
-
-          fs.writeFileSync(tmpFname, fcontents, "utf8")
-          args.splice(-1, 1, tmpFname)
-        }
-
-        for (var i in process.env) {
-          env[i] = process.env[i]
-        }
-        env.TAP = 1
-
-        var cp = child_process.spawn(cmd, args, { env: env, cwd: relDir })
-          , out = ""
-          , err = ""
-          , tc = new TapConsumer()
-          , childTests = [f]
-
-        var timeout = setTimeout(function () {
-          if (!cp._ended) {
-            cp._timedOut = true
-            cp.kill()
-          }
-        }, self.options.timeout * 1000)
-
-        tc.on("data", function(c) {
-          self.emit("result", c)
-          self.write(c)
-        })
-
-        tc.on("bailout", function (message) {
-          clearTimeout(timeout)
-          console.log("# " + f.substr(process.cwd().length + 1))
-          process.stderr.write(err)
-          process.stdout.write(out + "\n")
-          self._bailedOut = true
-          cp._ended = true
-          cp.kill()
-        })
-
-        cp.stdout.pipe(tc)
-        cp.stdout.on("data", function (c) { out += c })
-        cp.stderr.on("data", function (c) {
-          if (self.options.stderr) process.stderr.write(c)
-          err += c
-        })
-
-        cp.on("exit", function (code, signal) {
-          if (cp._ended) return
-          cp._ended = true
-          var ok = !cp._timedOut && code === 0
-          clearTimeout(timeout)
-          //childTests.forEach(function (c) { self.write(c) })
-          var res = { name: path.dirname(f).replace(process.cwd() + "/", "")
-                          + "/" + fileName
-                    , ok: ok
-                    , exit: code }
-
-          if (cp._timedOut)
-            res.timedOut = cp._timedOut
-          if (signal)
-            res.signal = signal
-
-          if (err) {
-            res.stderr = err
-            if (tc.results.ok &&
-                tc.results.tests === 0 &&
-                !self.options.stderr) {
-              // perhaps a compilation error or something else failed.
-              // no need if stderr is set, since it will have been
-              // output already anyway.
-              console.error(err)
-            }
-          }
-
-          // tc.results.ok = tc.results.ok && ok
-          tc.results.add(res)
-          res.command = [cmd].concat(args).map(JSON.stringify).join(" ")
-          self.emit("result", res)
-          self.emit("file", f, res, tc.results)
-          self.write(res)
-          self.write("\n")
-          if (doCoverage) {
-            self.f2delete.push(tmpFname)
-          }
-          cb()
-        })
-      })
-    }
-  }), cb)
-
-  return self
-}
-
-
-// Get an array of full paths to files we are interested into obtain
-// code coverage.
-Runner.prototype.getFilesToCover = function(filesToCover) {
-  var self = this
-  filesToCover = filesToCover.split(",").map(function(f) {
-    return path.resolve(f)
-  }).filter(function(f) {
-    return path.existsSync(f)
-  })
-
-  function recursive(f) {
-    if (path.extname(f) === "") {
-      // Is a directory:
-      fs.readdirSync(f).forEach(function(p) {
-        recursive(f + "/" + p)
-      })
-    } else {
-      self.coverageFiles.push(f)
-    }
-  }
-  filesToCover.forEach(function(f) {
-    recursive(f)
-  })
-}
-
-// Prepend to every test file to run. Note tap.test at the very top due it
-// "plays" with include paths.
-Runner.prototype.coverHeader = function() {
-  // semi here since we're injecting it before the first line,
-  // and don't want to mess up line numbers in the test files.
-  return "var ___TAP_COVERAGE = require("
-       + JSON.stringify(require.resolve("runforcover"))
-       + ").cover(/.*/g);"
-}
-
-// Append at the end of every test file to run. Actually, the stuff which gets
-// the coverage information.
-// Maybe it would be better to move into a separate file template so editing
-// could be easier.
-Runner.prototype.coverFooter = function() {
-  var self = this
-  // This needs to be a string with proper interpolations:
-  return [ ""
-  , "var ___TAP = require(" + JSON.stringify(require.resolve("./main.js")) + ")"
-  , "if (typeof ___TAP._plan === 'number') ___TAP._plan ++"
-  , "___TAP.test(" + JSON.stringify("___coverage") + ", function(t) {"
-  , "  var covFiles = " + JSON.stringify(self.coverageFiles)
-  , "    , covDir = " + JSON.stringify(self.coverageOutDir)
-  , "    , path = require('path')"
-  , "    , fs = require('fs')"
-  , "    , testFnBase = path.basename(__filename, '.js') + '.json'"
-  , "    , testFn = path.resolve(covDir, testFnBase)"
-  , ""
-  , "  function asyncForEach(arr, fn, callback) {"
-  , "    if (!arr.length) {"
-  , "      return callback()"
-  , "    }"
-  , "    var completed = 0"
-  , "    arr.forEach(function(i) {"
-  , "      fn(i, function (err) {"
-  , "        if (err) {"
-  , "          callback(err)"
-  , "          callback = function () {}"
-  , "        } else {"
-  , "          completed += 1"
-  , "          if (completed === arr.length) {"
-  , "            callback()"
-  , "          }"
-  , "        }"
-  , "      })"
-  , "    })"
-  , "  }"
-  , ""
-  , "  ___TAP_COVERAGE(function(coverageData) {"
-  , "    var outObj = {}"
-  , "    asyncForEach(covFiles, function(f, cb) {"
-  , "      if (coverageData[f]) {"
-  , "        var stats = coverageData[f].stats()"
-  , "          , stObj = stats"
-  , "        stObj.lines = stats.lines.map(function (l) {"
-  , "          return { number: l.lineno, source: l.source() }"
-  , "        })"
-  , "        outObj[f] = stObj"
-  , "      }"
-  , "      cb()"
-  , "    }, function(err) {"
-  , "      ___TAP_COVERAGE.release()"
-  , "      fs.writeFileSync(testFn, JSON.stringify(outObj))"
-  , "      t.end()"
-  , "    })"
-  , "  })"
-  , "})" ].join("\n")
-}
-
-
-Runner.prototype.getFilesToCoverSource = function(cb) {
-  var self = this
-  asyncMap(self.coverageFiles, function(f, cb) {
-    fs.readFile(f, "utf8", function(err, data) {
-      var lc = 0
-      if (err) {
-        cb(err)
-      }
-      self.coverageFilesSource[f] = data.split("\n").map(function(l) {
-        lc += 1
-        return { number: lc, source: l }
-      })
-      cb()
-    })
-  }, cb)
-}
-
-Runner.prototype.getPerFileCovInfo = function(cb) {
-  var self = this
-    , covPath = path.resolve(self.coverageOutDir)
-
-  fs.readdir(covPath, function(err, files) {
-    if (err) {
-      self.emit("error", err)
-    }
-    var covFiles = files.filter(function(f) {
-      return path.extname(f) === ".json"
-    })
-    asyncMap(covFiles, function(f, cb) {
-      fs.readFile(path.resolve(covPath, f), "utf8", function(err, data) {
-        if (err) {
-          cb(err)
-        }
-        self.rawCovStats.push(JSON.parse(data))
-        cb()
-      })
-    }, function(f, cb) {
-      fs.unlink(path.resolve(covPath, f), cb)
-    }, cb)
-  })
-}
-
-Runner.prototype.mergeCovStats = function(cb) {
-  var self = this
-  self.rawCovStats.forEach(function(st) {
-    Object.keys(st).forEach(function(i) {
-      // If this is the first time we reach this file, just add the info:
-      if (!self.covStats[i]) {
-        self.covStats[i] = {
-          missing: st[i].lines
-        }
-      } else {
-        // If we already added info for this file before, we need to remove
-        // from self.covStats any line not duplicated again (since it has
-        // run on such case)
-        self.covStats[i].missing = self.covStats[i].missing.filter(
-          function(l) {
-            return (st[i].lines.indexOf(l))
-          })
-      }
-    })
-  })
-
-  // This is due to a bug into
-  // chrisdickinson/node-bunker/blob/feature/add-coverage-interface
-  // which is using array indexes for line numbers instead of the right number
-  Object.keys(self.covStats).forEach(function(f) {
-    self.covStats[f].missing = self.covStats[f].missing.map(function(line) {
-      return { number: line.number, source: line.source }
-    })
-  })
-
-  Object.keys(self.coverageFilesSource).forEach(function(f) {
-    if (!self.covStats[f]) {
-      self.covStats[f] = { missing: self.coverageFilesSource[f]
-                          , percentage: 0
-      }
-    }
-    self.covStats[f].lines = self.coverageFilesSource[f]
-    self.covStats[f].loc = self.coverageFilesSource[f].length
-
-    if (!self.covStats[f].percentage) {
-      self.covStats[f].percentage =
-        1 - (self.covStats[f].missing.length / self.covStats[f].loc)
-    }
-
-  })
-  cb()
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/lib/tap-test.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/lib/tap-test.js b/node_modules/nodeunit/node_modules/tap/lib/tap-test.js
deleted file mode 100644
index 15ae8fb..0000000
--- a/node_modules/nodeunit/node_modules/tap/lib/tap-test.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// This is a very simple test framework that leverages the tap framework
-// to run tests and output tap-parseable results.
-
-module.exports = Test
-
-var assert = require("./tap-assert")
-  , inherits = require("inherits")
-  , Results = require("./tap-results")
-
-// tests are also test harnesses
-inherits(Test, require("./tap-harness"))
-
-function Test (harness, name, conf) {
-  //console.error("test ctor")
-  if (!(this instanceof Test)) return new Test(harness, name, conf)
-
-  Test.super.call(this, Test)
-
-  conf.name = name || conf.name || "(anonymous)"
-  this.conf = conf
-
-  this.harness = harness
-  this.harness.add(this)
-}
-
-// it's taking too long!
-Test.prototype.timeout = function () {
-  // detect false alarms
-  if (this._ended) return
-  this.fail("Timeout!")
-  this.end()
-}
-
-Test.prototype.clear = function () {
-  this._started = false
-  this._ended = false
-  this._plan = null
-  this._bailedOut = false
-  this._testCount = 0
-  this.results = new Results()
-}
-
-// this gets called if a test throws ever
-Test.prototype.threw = function (ex) {
-  //console.error("threw!", ex.stack)
-  this.fail(ex.name + ": " + ex.message, { error: ex, thrown: true })
-  // may emit further failing tests if the plan is not completed
-  //console.error("end, because it threw")
-  if (!this._ended) this.end()
-}
-
-Test.prototype.comment = function (m) {
-  if (typeof m !== "string") {
-    return this.fail("Test.comment argument must be a string")
-  }
-  this.result("\n" + m.trim())
-}
-
-Test.prototype.result = function (res) {
-  this.results.add(res)
-  this._testCount ++
-  this.emit("result", res)
-  if (this._plan === this._testCount) {
-    process.nextTick(this._endNice.bind(this))
-  }
-}
-
-Test.prototype._endNice = function () {
-  if (!this._ended) this.end()
-}
-
-// parasitic
-// Who says you can't do multiple inheritance in js?
-Object.getOwnPropertyNames(assert).forEach(function (k) {
-  if (k === "prototype" || k === "name") return
-  var d = Object.getOwnPropertyDescriptor(assert, k)
-    , v = d.value
-  if (!v) return
-  d.value = assertParasite(v)
-  Object.defineProperty(Test.prototype, k, d)
-})
-
-function assertParasite (fn) { return function _testAssert () {
-  //console.error("_testAssert", fn.name, arguments)
-  if (this._bailedOut) return
-  var res = fn.apply(assert, arguments)
-  this.result(res)
-  return res
-}}
-
-// a few tweaks on the EE emit function, because
-// we want to catch all thrown errors and bubble up "bailout"
-Test.prototype.emit = (function (em) { return function (t) {
-  // bailouts bubble until handled
-  if (t === "bailout" &&
-      this.listeners(t).length === 0 &&
-      this.harness) {
-    return this.harness.bailout(arguments[1])
-  }
-
-  if (t === "error") return em.apply(this, arguments)
-  try {
-    em.apply(this, arguments)
-  } catch (ex) {
-    // any exceptions in a test are a failure
-    //console.error("caught!", ex.stack)
-    this.threw(ex)
-  }
-}})(Test.super.prototype.emit)

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/.bin/nopt
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/.bin/nopt b/node_modules/nodeunit/node_modules/tap/node_modules/.bin/nopt
deleted file mode 120000
index 6b6566e..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/.bin/nopt
+++ /dev/null
@@ -1 +0,0 @@
-../nopt/bin/nopt.js
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/.travis.yml b/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/.travis.yml
deleted file mode 100644
index f1d0f13..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - 0.4
-  - 0.6

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/README.markdown
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/README.markdown b/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/README.markdown
deleted file mode 100644
index 571938a..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/README.markdown
+++ /dev/null
@@ -1,62 +0,0 @@
-buffer-equal
-============
-
-Return whether two buffers are equal.
-
-[![build status](https://secure.travis-ci.org/substack/node-buffer-equal.png)](http://travis-ci.org/substack/node-buffer-equal)
-
-example
-=======
-
-``` js
-var bufferEqual = require('bufferEqual');
-
-console.dir(bufferEqual(
-    new Buffer([253,254,255]),
-    new Buffer([253,254,255])
-));
-console.dir(bufferEqual(
-    new Buffer('abc'),
-    new Buffer('abcd')
-));
-console.dir(bufferEqual(
-    new Buffer('abc'),
-    'abc'
-));
-```
-
-output:
-
-```
-true
-false
-undefined
-```
-
-methods
-=======
-
-``` js
-var bufferEqual = require('buffer-equal')
-```
-
-bufferEqual(a, b)
------------------
-
-Return whether the two buffers `a` and `b` are equal.
-
-If `a` or `b` is not a buffer, return `undefined`.
-
-install
-=======
-
-With [npm](http://npmjs.org) do:
-
-```
-npm install buffer-equal
-```
-
-license
-=======
-
-MIT

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/example/eq.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/example/eq.js b/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/example/eq.js
deleted file mode 100644
index 1eb0509..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/example/eq.js
+++ /dev/null
@@ -1,14 +0,0 @@
-var bufferEqual = require('../');
-
-console.dir(bufferEqual(
-    new Buffer([253,254,255]),
-    new Buffer([253,254,255])
-));
-console.dir(bufferEqual(
-    new Buffer('abc'),
-    new Buffer('abcd')
-));
-console.dir(bufferEqual(
-    new Buffer('abc'),
-    'abc'
-));

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/index.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/index.js b/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/index.js
deleted file mode 100644
index 35a73c3..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-var Buffer = require('buffer').Buffer; // for use with browserify
-
-module.exports = function (a, b) {
-    if (!Buffer.isBuffer(a)) return undefined;
-    if (!Buffer.isBuffer(b)) return undefined;
-    if (a.length !== b.length) return false;
-    
-    for (var i = 0; i < a.length; i++) {
-        if (a[i] !== b[i]) return false;
-    }
-    
-    return true;
-};

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/package.json
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/package.json b/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/package.json
deleted file mode 100644
index 1691947..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/package.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "name": "buffer-equal",
-  "description": "return whether two buffers are equal",
-  "version": "0.0.0",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/substack/node-buffer-equal.git"
-  },
-  "main": "index.js",
-  "keywords": [
-    "buffer",
-    "equal"
-  ],
-  "directories": {
-    "example": "example",
-    "test": "test"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "devDependencies": {
-    "tap": "~0.2.4"
-  },
-  "engines": {
-    "node": ">=0.4.0"
-  },
-  "license": "MIT",
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "readme": "buffer-equal\n============\n\nReturn whether two buffers are equal.\n\n[![build status](https://secure.travis-ci.org/substack/node-buffer-equal.png)](http://travis-ci.org/substack/node-buffer-equal)\n\nexample\n=======\n\n``` js\nvar bufferEqual = require('bufferEqual');\n\nconsole.dir(bufferEqual(\n    new Buffer([253,254,255]),\n    new Buffer([253,254,255])\n));\nconsole.dir(bufferEqual(\n    new Buffer('abc'),\n    new Buffer('abcd')\n));\nconsole.dir(bufferEqual(\n    new Buffer('abc'),\n    'abc'\n));\n```\n\noutput:\n\n```\ntrue\nfalse\nundefined\n```\n\nmethods\n=======\n\n``` js\nvar bufferEqual = require('buffer-equal')\n```\n\nbufferEqual(a, b)\n-----------------\n\nReturn whether the two buffers `a` and `b` are equal.\n\nIf `a` or `b` is not a buffer, return `undefined`.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install buffer-equal\n```\n\nlicense\n=======\n\nMIT\n",
-  "_id": "buffer-equal@0.0.0",
-  "_from": "buffer-equal@~0.0.0"
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/test/eq.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/test/eq.js b/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/test/eq.js
deleted file mode 100644
index 3d34006..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/buffer-equal/test/eq.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var bufferEqual = require('../');
-var test = require('tap').test;
-
-test('equal', function (t) {
-    var eq = bufferEqual(
-        new Buffer([253,254,255]),
-        new Buffer([253,254,255])
-    );
-    t.strictEqual(eq, true);
-    t.end();
-});
-
-test('not equal', function (t) {
-    var eq = bufferEqual(
-        new Buffer('abc'),
-        new Buffer('abcd')
-    );
-    t.strictEqual(eq, false);
-    t.end();
-});
-
-test('not equal not buffer', function (t) {
-    var eq = bufferEqual(
-        new Buffer('abc'),
-        'abc'
-    );
-    t.strictEqual(eq, undefined);
-    t.end();
-});
-
-test('equal not buffer', function (t) {
-    var eq = bufferEqual('abc', 'abc');
-    t.strictEqual(eq, undefined);
-    t.end();
-});

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/README.markdown
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/README.markdown b/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/README.markdown
deleted file mode 100644
index c3293d3..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/README.markdown
+++ /dev/null
@@ -1,55 +0,0 @@
-deep-equal
-==========
-
-Node's `assert.deepEqual() algorithm` as a standalone module.
-
-example
-=======
-
-``` js
-var equal = require('deep-equal');
-console.dir([
-    equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ),
-    equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    )
-]);
-```
-
-methods
-=======
-
-var deepEqual = require('deep-equal')
-
-deepEqual(a, b)
----------------
-
-Compare objects `a` and `b`, returning whether they are equal according to a
-recursive equality algorithm.
-
-install
-=======
-
-With [npm](http://npmjs.org) do:
-
-```
-npm install deep-equal
-```
-
-test
-====
-
-With [npm](http://npmjs.org) do:
-
-```
-npm test
-```
-
-license
-=======
-
-MIT. Derived largely from node's assert module.

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/example/cmp.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/example/cmp.js b/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/example/cmp.js
deleted file mode 100644
index 67014b8..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/example/cmp.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var equal = require('../');
-console.dir([
-    equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ),
-    equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    )
-]);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/index.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/index.js b/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/index.js
deleted file mode 100644
index e4e37be..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/index.js
+++ /dev/null
@@ -1,84 +0,0 @@
-var pSlice = Array.prototype.slice;
-var Object_keys = typeof Object.keys === 'function'
-    ? Object.keys
-    : function (obj) {
-        var keys = [];
-        for (var key in obj) keys.push(key);
-        return keys;
-    }
-;
-
-var deepEqual = module.exports = function (actual, expected) {
-  // 7.1. All identical values are equivalent, as determined by ===.
-  if (actual === expected) {
-    return true;
-
-  } else if (actual instanceof Date && expected instanceof Date) {
-    return actual.getTime() === expected.getTime();
-
-  // 7.3. Other pairs that do not both pass typeof value == 'object',
-  // equivalence is determined by ==.
-  } else if (typeof actual != 'object' && typeof expected != 'object') {
-    return actual == expected;
-
-  // 7.4. For all other Object pairs, including Array objects, equivalence is
-  // determined by having the same number of owned properties (as verified
-  // with Object.prototype.hasOwnProperty.call), the same set of keys
-  // (although not necessarily the same order), equivalent values for every
-  // corresponding key, and an identical 'prototype' property. Note: this
-  // accounts for both named and indexed properties on Arrays.
-  } else {
-    return objEquiv(actual, expected);
-  }
-}
-
-function isUndefinedOrNull(value) {
-  return value === null || value === undefined;
-}
-
-function isArguments(object) {
-  return Object.prototype.toString.call(object) == '[object Arguments]';
-}
-
-function objEquiv(a, b) {
-  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
-    return false;
-  // an identical 'prototype' property.
-  if (a.prototype !== b.prototype) return false;
-  //~~~I've managed to break Object.keys through screwy arguments passing.
-  //   Converting to array solves the problem.
-  if (isArguments(a)) {
-    if (!isArguments(b)) {
-      return false;
-    }
-    a = pSlice.call(a);
-    b = pSlice.call(b);
-    return deepEqual(a, b);
-  }
-  try {
-    var ka = Object_keys(a),
-        kb = Object_keys(b),
-        key, i;
-  } catch (e) {//happens when one is a string literal and the other isn't
-    return false;
-  }
-  // having the same number of owned properties (keys incorporates
-  // hasOwnProperty)
-  if (ka.length != kb.length)
-    return false;
-  //the same set of keys (although not necessarily the same order),
-  ka.sort();
-  kb.sort();
-  //~~~cheap key test
-  for (i = ka.length - 1; i >= 0; i--) {
-    if (ka[i] != kb[i])
-      return false;
-  }
-  //equivalent values for every corresponding key, and
-  //~~~possibly expensive deep test
-  for (i = ka.length - 1; i >= 0; i--) {
-    key = ka[i];
-    if (!deepEqual(a[key], b[key])) return false;
-  }
-  return true;
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/package.json
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/package.json b/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/package.json
deleted file mode 100644
index dced37e..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
-  "name": "deep-equal",
-  "version": "0.0.0",
-  "description": "node's assert.deepEqual algorithm",
-  "main": "index.js",
-  "directories": {
-    "lib": ".",
-    "example": "example",
-    "test": "test"
-  },
-  "scripts": {
-    "test": "tap test/*.js"
-  },
-  "devDependencies": {
-    "tap": "0.0.x"
-  },
-  "repository": {
-    "type": "git",
-    "url": "http://github.com/substack/node-deep-equal.git"
-  },
-  "keywords": [
-    "equality",
-    "equal",
-    "compare"
-  ],
-  "author": {
-    "name": "James Halliday",
-    "email": "mail@substack.net",
-    "url": "http://substack.net"
-  },
-  "license": "MIT/X11",
-  "engine": {
-    "node": ">=0.4"
-  },
-  "readme": "deep-equal\n==========\n\nNode's `assert.deepEqual() algorithm` as a standalone module.\n\nexample\n=======\n\n``` js\nvar equal = require('deep-equal');\nconsole.dir([\n    equal(\n        { a : [ 2, 3 ], b : [ 4 ] },\n        { a : [ 2, 3 ], b : [ 4 ] }\n    ),\n    equal(\n        { x : 5, y : [6] },\n        { x : 5, y : 6 }\n    )\n]);\n```\n\nmethods\n=======\n\nvar deepEqual = require('deep-equal')\n\ndeepEqual(a, b)\n---------------\n\nCompare objects `a` and `b`, returning whether they are equal according to a\nrecursive equality algorithm.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install deep-equal\n```\n\ntest\n====\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm test\n```\n\nlicense\n=======\n\nMIT. Derived largely from node's assert module.\n",
-  "_id": "deep-equal@0.0.0",
-  "_from": "deep-equal@~0.0.0"
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/test/cmp.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/test/cmp.js b/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/test/cmp.js
deleted file mode 100644
index 8418f0f..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/deep-equal/test/cmp.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var test = require('tap').test;
-var equal = require('../');
-
-test('equal', function (t) {
-    t.ok(equal(
-        { a : [ 2, 3 ], b : [ 4 ] },
-        { a : [ 2, 3 ], b : [ 4 ] }
-    ));
-    t.end();
-});
-
-test('not equal', function (t) {
-    t.notOk(equal(
-        { x : 5, y : [6] },
-        { x : 5, y : 6 }
-    ));
-    t.end();
-});

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/.travis.yml
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/.travis.yml b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/.travis.yml
deleted file mode 100644
index f1d0f13..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/.travis.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-language: node_js
-node_js:
-  - 0.4
-  - 0.6

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/README.markdown
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/README.markdown b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/README.markdown
deleted file mode 100644
index 9ad4303..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/README.markdown
+++ /dev/null
@@ -1,116 +0,0 @@
-difflet
-=======
-
-Create colorful diffs for javascript objects.
-
-example
-=======
-
-string.js
----------
-
-``` js
-var difflet = require('difflet');
-
-var s = difflet.compare({ a : 2, c : 5 }, { a : 3, b : 4 });
-process.stdout.write(s);
-```
-
-output:
-
-![colorful output](http://substack.net/images/screenshots/difflet_string.png)
-
-colors.js
----------
-
-``` js
-var diff = require('difflet')({ indent : 2 });
-
-var prev = {
-    yy : 6,
-    zz : 5,
-    a : [1,2,3],
-    fn : 'beep',
-    c : { x : 7, z : 3 }
-};
-
-var next = {
-    a : [ 1, 2, "z", /beep/, new Buffer(3) ],
-    fn : function qqq () {},
-    b : [5,6,7],
-    c : { x : 8, y : 5 }
-};
-
-diff(prev, next).pipe(process.stdout);
-```
-
-output:
-
-![colorful output](http://substack.net/images/screenshots/difflet_colors.png)
-
-green for inserts, blue for updates, red for deletes
-
-methods
-=======
-
-var difflet = require('difflet')
-
-var diff = difflet(opts={})
----------------------------
-
-Create a difflet from optional options `opts`.
-
-With `opts.start(type, stream)` and `opts.stop(type, stream)`,
-you can write custom handlers for all the types of differences:
-`'inserted'`, `'updated'`, and `'deleted'`.
-By default green is used for insertions, blue for updates, and red for
-deletions.
-
-If `opts.indent` is set, output will span multiple lines and `opts.indent`
-spaces will be used for leading whitespace.
-
-If `opts.comma === 'first'` then commas will be placed at the start of lines.
-
-Setting `opts.comment` to `true` will turn on comments with the previous
-contents like this:
-
-![object comments](http://substack.net/images/screenshots/difflet_object_comments.png)
-
-diff(prev, next)
-----------------
-
-Return a stream with the colorful changes between objects `prev` and `next`.
-
-diff.compare(prev, next)
-------------------------
-
-Return a string with the colorful changes between `prev` and `next`.
-
-difflet.compare(prev, next)
----------------------------
-
-Return a string with the colorful changes between `prev` and `next` with the
-default options.
-
-install
-=======
-
-With [npm](http://npmjs.org) do:
-
-```
-npm install difflet
-```
-
-test
-====
-
-With [npm](http://npmjs.org) do:
-
-```
-npm test
-```
-
-license
-=======
-
-MIT/X11

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_array.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_array.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_array.js
deleted file mode 100644
index bc5733f..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_array.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var difflet = require('../');
-var s = difflet({ indent : 2, comment : true }).compare(
-    [ 1, [2,3,{a:4}], 3 ],
-    [ 1, [[5],6,7], 4 ]
-);
-process.stdout.write(s);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_object.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_object.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_object.js
deleted file mode 100644
index 5e00e2c..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/cmp_object.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var difflet = require('../');
-var s = difflet({ indent : 2, comment : true }).compare(
-    { z : [6,7], a : 'abcdefgh', b : [ 31, 'xxt' ] },
-    { x : 5, a : 'abdcefg', b : [ 51, 'xxs' ] }
-);
-console.log(s);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/colors.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/colors.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/colors.js
deleted file mode 100644
index 332bbae..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/colors.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var diff = require('../')({ indent : 2 });
-
-var prev = {
-    yy : 6,
-    zz : 5,
-    a : [1,2,3],
-    fn : 'beep',
-    c : { x : 7, z : 3 }
-};
-
-var next = {
-    a : [ 1, 2, "z", /beep/, new Buffer(3) ],
-    fn : function qqq () {},
-    b : [5,6,7],
-    c : { x : 8, y : 5 }
-};
-
-diff(prev, next).pipe(process.stdout);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/comma_first.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/comma_first.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/comma_first.js
deleted file mode 100644
index 67ece23..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/comma_first.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var diff = require('../')({
-    indent : 2,
-    comma : 'first',
-});
-
-var prev = { yy : 6, zz : 5, a : [1,2,3] };
-var next = {
-    a : [ 1, 2, 3, [4], "z", /beep/, new Buffer(3) ],
-    fn : 8,
-    b : [5,6,7]
-};
-diff(prev, next).pipe(process.stdout);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/diff.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/diff.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/diff.js
deleted file mode 100644
index 08f6e7a..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/diff.js
+++ /dev/null
@@ -1,15 +0,0 @@
-var difflet = require('../');
-var a = {
-    x : 4,
-    z : 8,
-    xs : [ 5, 2, 1, { 0 : 'c' } ],
-};
-
-var b = {
-    x : 4,
-    y : 5,
-    xs : [ 5, 2, 2, { c : 5 } ],
-};
-
-var s = difflet({ comment : true, indent : 2 }).compare(a, b);
-console.log(s);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/html.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/html.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/html.js
deleted file mode 100644
index 9ff4a29..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/html.js
+++ /dev/null
@@ -1,34 +0,0 @@
-var difflet = require('../');
-var ent = require('ent');
-
-var tags = {
-    inserted : '<span class="g">',
-    updated : '<span class="b">',
-    deleted : '<span class="r">',
-};
-var diff = difflet({
-    start : function (t, s) {
-        s.write(tags[t]);
-    },
-    stop : function (t, s) {
-        s.write('</span>');
-    },
-    write : function (buf) {
-        stream.write(ent.encode(buf))
-    },
-});
-
-var prev = {
-    yy : 6,
-    zz : 5,
-    a : [1,2,3],
-    fn : function qq () {}
-};
-var next = {
-    a : [ 1, 2, 3, [4], "z", /beep/, new Buffer([0,1,2]) ],
-    fn : 'I <3 robots',
-    b : [5,6,7]
-};
-
-var stream = diff(prev, next);
-stream.pipe(process.stdout, { end : false });

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/string.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/string.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/string.js
deleted file mode 100644
index 6cff6cb..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/example/string.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var difflet = require('../');
-
-var s = difflet.compare({ a : 2, c : 5 }, { a : 3, b : 4 });
-process.stdout.write(s);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/index.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/index.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/index.js
deleted file mode 100644
index cc32f2b..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/index.js
+++ /dev/null
@@ -1,371 +0,0 @@
-var traverse = require('traverse');
-var Stream = require('stream').Stream;
-var charm = require('charm');
-var deepEqual = require('deep-equal');
-
-var exports = module.exports = function (opts_) {
-    var fn = difflet.bind(null, opts_);
-    fn.compare = function (prev, next) {
-        var opts = Object.keys(opts_ || {}).reduce(function (acc, key) {
-            acc[key] = opts_[key];
-            return acc;
-        }, {});
-        var s = opts.stream = new Stream;
-        var data = '';
-        s.write = function (buf) { data += buf };
-        s.end = function () {};
-        s.readable = true;
-        s.writable = true;
-        
-        difflet(opts, prev, next);
-        return data;
-    };
-    return fn;
-};
-
-exports.compare = function (prev, next) {
-    return exports({}).compare(prev, next);
-};
-
-function difflet (opts, prev, next) {
-    var stream = opts.stream || new Stream;
-    if (!opts.stream) {
-        stream.readable = true;
-        stream.writable = true;
-        stream.write = function (buf) { this.emit('data', buf) };
-        stream.end = function () { this.emit('end') };
-    }
-    
-    if (!opts) opts = {};
-    if (opts.start === undefined && opts.stop === undefined) {
-        var c = charm(stream);
-        opts.start = function (type) {
-            c.foreground({
-                inserted : 'green',
-                updated : 'blue',
-                deleted : 'red',
-                comment : 'cyan',
-            }[type]);
-            c.display('bright');
-        };
-        opts.stop = function (type) {
-            c.display('reset');
-        };
-    }
-    var write = function (buf) {
-        if (opts.write) opts.write(buf, stream)
-        else stream.write(buf)
-    };
-    
-    var commaFirst = opts.comma === 'first';
-    
-    var stringify = function (node, params) {
-        return stringifier.call(this, true, node, params || opts);
-    };
-    var plainStringify = function (node, params) {
-        return stringifier.call(this, false, node, params || opts);
-    };
-    
-    var levels = 0;
-    function set (type) {
-        if (levels === 0) opts.start(type, stream);
-        levels ++;
-    }
-    
-    function unset (type) {
-        if (--levels === 0) opts.stop(type, stream);
-    }
-    
-    function stringifier (insertable, node, opts) {
-        var indent = opts.indent;
-        
-        if (insertable) {
-            var prevNode = traverse.get(prev, this.path || []);
-        }
-        var inserted = insertable && prevNode === undefined;
-        
-        var indentx = indent ? Array(
-            ((this.path || []).length + 1) * indent + 1
-        ).join(' ') : '';
-        if (commaFirst) indentx = indentx.slice(indent);
-        
-        if (Array.isArray(node)) {
-            var updated = (prevNode || traverse.has(prev, this.path))
-                && !Array.isArray(prevNode);
-            if (updated) {
-                set('updated');
-            }
-            
-            if (opts.comment && !Array.isArray(prevNode)) {
-                indent = 0;
-            }
-            
-            this.before(function () {
-                if (inserted) set('inserted');
-                if (indent && commaFirst) {
-                    if ((this.path || []).length === 0
-                    || Array.isArray(this.parent.node)) {
-                        write('[ ');
-                    }
-                    else write('\n' + indentx + '[ ');
-                }
-                else if (indent) {
-                    write('[\n' + indentx);
-                }
-                else {
-                    write('[');
-                }
-            });
-            
-            this.post(function (child) {
-                if (!child.isLast && !(indent && commaFirst)) {
-                    write(',');
-                }
-                
-                var prev = prevNode && prevNode[child.key];
-                if (indent && opts.comment && child.node !== prev
-                && (typeof child.node !== 'object' || typeof prev !== 'object')
-                ) {
-                    set('comment');
-                    write(' // != ');
-                    traverse(prev).forEach(function (x) {
-                        plainStringify.call(this, x, { indent : 0 });
-                    });
-                    unset('comment');
-                }
-                
-                if (!child.isLast) {
-                    if (indent && commaFirst) {
-                        write('\n' + indentx + ', ');
-                    }
-                    else if (indent) {
-                        write('\n' + indentx);
-                    }
-                }
-            });
-            
-            this.after(function () {
-                if (indent && commaFirst) write('\n' + indentx);
-                else if (indent) write('\n' + indentx.slice(indent));
-                
-                write(']');
-                if (updated) unset('updated');
-                if (inserted) unset('inserted');
-            });
-        }
-        else if (isRegExp(node)) {
-            this.block();
-            
-            if (inserted) {
-                set('inserted');
-                write(node.toString());
-                unset('inserted');
-            }
-            else if (insertable && prevNode !== node) {
-                set('updated');
-                write(node.toString());
-                unset('updated');
-            }
-            else write(node.toString());
-        }
-        else if (typeof node === 'object'
-        && node && typeof node.inspect === 'function') {
-            this.block();
-            if (inserted) {
-                set('inserted');
-                write(node.inspect());
-                unset('inserted');
-            }
-            else if (!(prevNode && typeof prevNode.inspect === 'function'
-            && prevNode.inspect() === node.inspect())) {
-                set('updated');
-                write(node.inspect());
-                unset('updated');
-            }
-            else write(node.inspect());
-        }
-        else if (typeof node == 'object' && node !== null) {
-            var insertedKey = false;
-            var deleted = insertable && typeof prevNode === 'object' && prevNode
-                ? Object.keys(prevNode).filter(function (key) {
-                    return !Object.hasOwnProperty.call(node, key);
-                })
-                : []
-            ;
-            
-            this.before(function () {
-                if (inserted) set('inserted');
-                write(indent && commaFirst && !this.isRoot
-                    ? '\n' + indentx + '{ '
-                    : '{'
-                );
-            });
-            
-            this.pre(function (x, key) {
-                if (insertable) {
-                    var obj = traverse.get(prev, this.path.concat(key));
-                    if (obj === undefined) {
-                        insertedKey = true;
-                        set('inserted');
-                    }
-                }
-                
-                if (indent && !commaFirst) write('\n' + indentx);
-                
-                plainStringify(key);
-                write(indent ? ' : ' : ':');
-            });
-            
-            this.post(function (child) {
-                if (!child.isLast && !(indent && commaFirst)) {
-                    write(',');
-                }
-                
-                if (child.isLast && deleted.length) {
-                    if (insertedKey) unset('inserted');
-                    insertedKey = false;
-                }
-                else if (insertedKey) {
-                    unset('inserted');
-                    insertedKey = false;
-                }
-                
-                var prev = prevNode && prevNode[child.key];
-                if (indent && opts.comment && child.node !== prev
-                && (typeof child.node !== 'object' || typeof prev !== 'object')
-                ) {
-                    set('comment');
-                    write(' // != ');
-                    traverse(prev).forEach(function (x) {
-                        plainStringify.call(this, x, { indent : 0 });
-                    });
-                    unset('comment');
-                }
-                
-                if (child.isLast && deleted.length) {
-                    if (insertedKey) unset('inserted');
-                    insertedKey = false;
-                    
-                    if (indent && commaFirst) {
-                        write('\n' + indentx + ', ')
-                    }
-                    else if (opts.comment && indent) {
-                        write('\n' + indentx);
-                    }
-                    else if (indent) {
-                        write(',\n' + indentx);
-                    }
-                    else write(',');
-                }
-                else {
-                    if (!child.isLast) {
-                        if (indent && commaFirst) {
-                            write('\n' + indentx + ', ');
-                        }
-                    }
-                }
-            });
-            
-            this.after(function () {
-                if (inserted) unset('inserted');
-                
-                if (deleted.length) {
-                    if (indent && !commaFirst
-                    && Object.keys(node).length === 0) {
-                        write('\n' + indentx);
-                    }
-                    
-                    set('deleted');
-                    deleted.forEach(function (key, ix) {
-                        if (indent && opts.comment) {
-                            unset('deleted');
-                            set('comment');
-                            write('// ');
-                            unset('comment');
-                            set('deleted');
-                        }
-                        
-                        plainStringify(key);
-                        write(indent ? ' : ' : ':');
-                        traverse(prevNode[key]).forEach(function (x) {
-                            plainStringify.call(this, x, { indent : 0 });
-                        });
-                        
-                        var last = ix === deleted.length - 1;
-                        if (insertable && !last) {
-                            if (indent && commaFirst) {
-                                write('\n' + indentx + ', ');
-                            }
-                            else if (indent) {
-                                write(',\n' + indentx);
-                            }
-                            else write(',');
-                        }
-                    });
-                    unset('deleted');
-                }
-                
-                if (commaFirst && indent) {
-                    write(indentx.slice(indent) + ' }');
-                }
-                else if (indent) {
-                    write('\n' + indentx.slice(indent) + '}');
-                }
-                else write('}');
-            });
-        }
-        else {
-            var changed = false;
-            
-            if (inserted) set('inserted');
-            else if (insertable && !deepEqual(prevNode, node)) {
-                changed = true;
-                set('updated');
-            }
-            
-            if (typeof node === 'string') {
-                write('"' + node.toString().replace(/"/g, '\\"') + '"');
-            }
-            else if (isRegExp(node)) {
-                write(node.toString());
-            }
-            else if (typeof node === 'function') {
-                write(node.name
-                    ? '[Function: ' + node.name + ']'
-                    : '[Function]'
-                );
-            }
-            else if (node === undefined) {
-                write('undefined');
-            }
-            else if (node === null) {
-                write('null');
-            }
-            else {
-                write(node.toString());
-            }
-            
-            if (inserted) unset('inserted');
-            else if (changed) unset('updated');
-        }
-    }
-    
-    if (opts.stream) {
-        traverse(next).forEach(stringify);
-    }
-    else process.nextTick(function () {
-        traverse(next).forEach(stringify);
-        stream.emit('end');
-    });
-    
-    return stream;
-}
-
-function isRegExp (node) {
-    return node instanceof RegExp || (node
-        && typeof node.test === 'function' 
-        && typeof node.exec === 'function'
-        && typeof node.compile === 'function'
-        && node.constructor && node.constructor.name === 'RegExp'
-    );
-}

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/README.markdown
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/README.markdown b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/README.markdown
deleted file mode 100644
index c78d81f..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/README.markdown
+++ /dev/null
@@ -1,202 +0,0 @@
-charm
-=====
-
-Use
-[ansi terminal characters](http://www.termsys.demon.co.uk/vtansi.htm)
-to write colors and cursor positions.
-
-![me lucky charms](http://substack.net/images/charms.png)
-
-example
-=======
-
-lucky
------
-
-````javascript
-var charm = require('charm')(process);
-charm.reset();
-
-var colors = [ 'red', 'cyan', 'yellow', 'green', 'blue' ];
-var text = 'Always after me lucky charms.';
-
-var offset = 0;
-var iv = setInterval(function () {
-    var y = 0, dy = 1;
-    for (var i = 0; i < 40; i++) {
-        var color = colors[(i + offset) % colors.length];
-        var c = text[(i + offset) % text.length];
-        charm
-            .move(1, dy)
-            .foreground(color)
-            .write(c)
-        ;
-        y += dy;
-        if (y <= 0 || y >= 5) dy *= -1;
-    }
-    charm.position(0, 1);
-    offset ++;
-}, 150);
- 
-charm.on('data', function (buf) {
-    if (buf[0] === 3) {
-        clearInterval(iv);
-        charm.destroy();
-    }
-});
-````
-
-events
-======
-
-Charm objects pass along the data events from their input stream except for
-events generated from querying the terminal device.
-
-Because charm puts stdin into raw mode, charm emits two special events: "^C" and
-"^D" when the user types those combos. It's super convenient with these events
-to do:
-
-````javascript
-charm.on('^C', process.exit)
-````
-
-methods
-=======
-
-var charm = require('charm')(param or stream, ...)
---------------------------------------------------
-
-Create a new `charm` given a `param` with `stdout` and `stdin` streams, such as
-`process` or by passing the streams in themselves separately as parameters.
-
-Protip: you can pass in an http response object as an output stream and it will
-just work™.
-
-charm.reset()
--------------
-
-Reset the entire screen, like the /usr/bin/reset command.
-
-charm.destroy()
----------------
-
-Destroy the input stream.
-
-charm.write(msg)
-----------------
-
-Pass along `msg` to the output stream.
-
-charm.position(x, y) or charm.position(cb)
-------------------------------------------
-
-Set the cursor position to the absolute coordinates `x, y` or query the position
-and get the response as `cb(x, y)`.
-
-charm.move(x, y)
-----------------
-
-Move the cursor position by the relative coordinates `x, y`.
-
-charm.up(y)
------------
-
-Move the cursor up by `y` rows.
-
-charm.down(y)
--------------
-
-Move the cursor down by `y` rows.
-
-charm.left(x)
--------------
-
-Move the cursor left by `x` columns.
-
-charm.right(x)
--------------
-
-Move the cursor right by `x` columns.
-
-charm.push(withAttributes=false)
---------------------------------
-
-Push the cursor state and optionally the attribute state.
-
-charm.pop(withAttributes=false)
--------------------------------
-
-Pop the cursor state and optionally the attribute state.
-
-charm.erase(s)
---------------
-
-Erase a region defined by the string `s`.
-
-`s` can be:
-
-* end - erase from the cursor to the end of the line
-* start - erase from the cursor to the start of the line
-* line - erase the current line
-* down - erase everything below the current line
-* up - erase everything above the current line
-* screen - erase the entire screen
-
-charm.display(attr)
--------------------
-
-Set the display mode with the string `attr`.
-
-`attr` can be:
-
-* reset
-* bright
-* dim
-* underscore
-* blink
-* reverse
-* hidden
-
-charm.foreground(color)
------------------------
-
-Set the foreground color with the string `color`, which can be:
-
-* red
-* yellow
-* green
-* blue
-* cyan
-* magenta
-* black
-* white
-
-or `color` can be an integer from 0 to 255, inclusive.
-
-charm.background(color)
------------------------
-
-Set the background color with the string `color`, which can be:
-
-* red
-* yellow
-* green
-* blue
-* cyan
-* magenta
-* black
-* white
-
-or `color` can be an integer from 0 to 255, inclusive.
-
-charm.cursor(visible)
----------------------
-
-Set the cursor visibility with a boolean `visible`.
-
-install
-=======
-
-With [npm](http://npmjs.org) do:
-
-    npm install charm

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/256.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/256.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/256.js
deleted file mode 100644
index 6851386..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/256.js
+++ /dev/null
@@ -1,17 +0,0 @@
-var charm = require('../')(process);
-
-function exit () {
-    charm.display('reset');
-    process.exit();
-}
-charm.on('^C', exit);
-
-var ix = 0;
-var iv = setInterval(function () {
-    charm.background(ix++).write(' ');
-    if (ix === 256) {
-        clearInterval(iv);
-        charm.write('\n');
-        exit();
-    }
-}, 10);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/column.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/column.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/column.js
deleted file mode 100644
index 448e9c3..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/column.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var charm = require('../')(process);
-
-charm
-    .column(16)
-    .write('beep')
-    .down()
-    .column(32)
-    .write('boop\n')
-    .destroy()
-;

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/cursor.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/cursor.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/cursor.js
deleted file mode 100644
index 0c565b0..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/cursor.js
+++ /dev/null
@@ -1,22 +0,0 @@
-var charm = require('../')(process);
-
-charm.position(5, 10);
-
-charm.position(function (x, y) {
-    console.dir([ x, y ]);
-    
-    charm.move(7,2);
-    charm.push();
-    process.stdout.write('lul');
-    
-    charm.left(3).up(1).foreground('magenta');
-    process.stdout.write('v');
-    charm.left(1).up(1).display('reset');
-    process.stdout.write('|');
-    
-    charm.down(3);
-    charm.pop().background('blue');
-    process.stdout.write('popped\npow');
-    charm.display('reset').erase('line');
-    charm.destroy();
-});

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/http_spin.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/http_spin.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/http_spin.js
deleted file mode 100644
index 53e0e4b..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/http_spin.js
+++ /dev/null
@@ -1,35 +0,0 @@
-var http = require('http');
-var charmer = require('../');
-
-http.createServer(function (req, res) {
-    res.setHeader('content-type', 'text/ansi');
-    
-    var charm = charmer(res);
-    charm.reset();
-    
-    var radius = 10;
-    var theta = 0;
-    var points = [];
-
-    var iv = setInterval(function () {
-        var x = 2 + (radius + Math.cos(theta) * radius) * 2;
-        var y = 2 + radius + Math.sin(theta) * radius;
-        
-        points.unshift([ x, y ]);
-        var colors = [ 'red', 'yellow', 'green', 'cyan', 'blue', 'magenta' ];
-        
-        points.forEach(function (p, i) {
-            charm.position(p[0], p[1]);
-            var c = colors[Math.floor(i / 12)];
-            charm.background(c).write(' ')
-        });
-        points = points.slice(0, 12 * colors.length - 1);
-        
-        theta += Math.PI / 40;
-    }, 50);
-    
-    req.connection.on('end', function () {
-        clearInterval(iv);
-        charm.destroy();
-    });
-}).listen(8081);

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/lucky.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/lucky.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/lucky.js
deleted file mode 100644
index 08dc5b5..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/lucky.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var charm = require('../')(process);
-charm.reset();
-
-var colors = [ 'red', 'cyan', 'yellow', 'green', 'blue' ];
-var text = 'Always after me lucky charms.';
-
-var offset = 0;
-var iv = setInterval(function () {
-    var y = 0, dy = 1;
-    for (var i = 0; i < 40; i++) {
-        var color = colors[(i + offset) % colors.length];
-        var c = text[(i + offset) % text.length];
-        charm
-            .move(1, dy)
-            .foreground(color)
-            .write(c)
-        ;
-        y += dy;
-        if (y <= 0 || y >= 5) dy *= -1;
-    }
-    charm.position(0, 1);
-    offset ++;
-}, 150);
- 
-charm.on('data', function (buf) {
-    if (buf[0] === 3) {
-        clearInterval(iv);
-        charm.destroy();
-    }
-});

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/position.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/position.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/position.js
deleted file mode 100644
index 2c5ae9b..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/position.js
+++ /dev/null
@@ -1,7 +0,0 @@
-var charm = require('charm')(process);
-
-charm.on('^C', process.exit);
-
-charm.position(function (x, y) {
-    console.log('(%d, %d)', x, y);
-});

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/progress.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/progress.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/progress.js
deleted file mode 100644
index f8db57b..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/progress.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var charm = require('../')(process);
-
-charm.write("Progress: 0 %");
-var i = 0;
-
-var increment = function () {
-    charm.left(i.toString().length + 2);
-    i = i + 1;
-    charm.write(i + " %");
-    if (i === 100) {
-        charm.write("\nDone!\n");
-        process.exit();
-    }
-};
-
-var loop = setInterval(increment, 50);
-
-charm.on('^C',process.exit);
-

http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/19cf42ee/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/spin.js
----------------------------------------------------------------------
diff --git a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/spin.js b/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/spin.js
deleted file mode 100644
index fd3e23a..0000000
--- a/node_modules/nodeunit/node_modules/tap/node_modules/difflet/node_modules/charm/example/spin.js
+++ /dev/null
@@ -1,23 +0,0 @@
-var charm = require('../')(process);
-charm.reset();
-
-var radius = 10;
-var theta = 0;
-var points = [];
-
-var iv = setInterval(function () {
-    var x = 2 + (radius + Math.cos(theta) * radius) * 2;
-    var y = 2 + radius + Math.sin(theta) * radius;
-    
-    points.unshift([ x, y ]);
-    var colors = [ 'red', 'yellow', 'green', 'cyan', 'blue', 'magenta' ];
-    
-    points.forEach(function (p, i) {
-        charm.position(p[0], p[1]);
-        var c = colors[Math.floor(i / 12)];
-        charm.background(c).write(' ')
-    });
-    points = points.slice(0, 12 * colors.length - 1);
-    
-    theta += Math.PI / 40;
-}, 50);