cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dase...@apache.org
Subject [05/13] cordova-firefoxos git commit: CB-9836 Add .gitattributes to prevent CRLF line endings in repos
Date Fri, 13 Nov 2015 11:50:09 GMT
http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/LICENSE-MIT
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/LICENSE-MIT b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/LICENSE-MIT
index bc56a8a..88caf87 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/LICENSE-MIT
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/LICENSE-MIT
@@ -1,22 +1,22 @@
-Copyright (c) 2012-2014 Chris Talkington, contributors.
-
-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
+Copyright (c) 2012-2014 Chris Talkington, contributors.
+
+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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/README.md
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/README.md b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/README.md
index 5ef812f..069afcb 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/README.md
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/README.md
@@ -1,166 +1,166 @@
-# Archiver v0.11.0 [![Build Status](https://travis-ci.org/ctalkington/node-archiver.svg?branch=master)](https://travis-ci.org/ctalkington/node-archiver)
-
-a streaming interface for archive generation
-
-[![NPM](https://nodei.co/npm/archiver.png)](https://nodei.co/npm/archiver/)
-
-## Install
-
-```bash
-npm install archiver --save
-```
-
-You can also use `npm install https://github.com/ctalkington/node-archiver/archive/master.tar.gz` to test upcoming versions.
-
-## Archiver
-
-#### create(format, options)
-
-Creates an Archiver instance based on the format (zip, tar, etc) passed. Parameters can be passed directly to `Archiver` constructor for convenience.
-
-#### registerFormat(format, module)
-
-Registers an archive format. Format modules are essentially transform streams with a few required methods. They will be further documented once a formal spec is in place.
-
-### Instance Methods
-
-Inherits [Transform Stream](http://nodejs.org/api/stream.html#stream_class_stream_transform) methods.
-
-#### append(input, data)
-
-Appends an input source (text string, buffer, or stream) to the instance. When the instance has received, processed, and emitted the input, the `entry` event is fired.
-
-Replaced `#addFile` in v0.5.
-
-```js
-archive.append('string', { name:'string.txt' });
-archive.append(new Buffer('string'), { name:'buffer.txt' });
-archive.append(fs.createReadStream('mydir/file.txt'), { name:'stream.txt' });
-archive.append(null, { name:'dir/' });
-```
-
-#### bulk(mappings)
-
-Appends multiple entries from passed array of src-dest mappings. A lazystream wrapper is used to prevent issues with open file limits.
-
-Globbing patterns are supported through use of the [file-utils](https://github.com/SBoudrias/file-utils) package. Please note that multiple src files to single dest file (ie concat) is not supported.
-
-The `data` property can be set (per src-dest mapping) to define data for matched entries.
-
-```js
-archive.bulk([
-  { src: ['mydir/**'], data: { date: new Date() } },
-  { expand: true, cwd: 'mydir', src: ['**'], dest: 'newdir' }
-]);
-```
-
-For more detail on this feature, please see [BULK.md](https://github.com/ctalkington/node-archiver/blob/master/BULK.md).
-
-#### file(filepath, data)
-
-Appends a file given its filepath using a lazystream wrapper to prevent issues with open file limits. When the instance has received, processed, and emitted the file, the `entry` event is fired.
-
-```js
-archive.file('mydir/file.txt', { name:'file.txt' });
-```
-
-#### finalize()
-
-Finalizes the instance and prevents further appending to the archive structure (queue will continue til drained). The `end`, `close` or `finish` events on the destination stream may fire right after calling this method so you should set listeners beforehand to properly detect stream completion.
-
-*You must call this method to get a valid archive and end the instance stream.*
-
-#### pointer()
-
-Returns the current byte length emitted by archiver. Use this in your end callback to log generated size.
-
-## Events
-
-Inherits [Transform Stream](http://nodejs.org/api/stream.html#stream_class_stream_transform) events.
-
-#### entry
-
-Fired when the input has been received, processed, and emitted. Passes entry data as first argument.
-
-## Zip
-
-### Options
-
-#### comment `string`
-
-Sets the zip comment.
-
-#### forceUTC `boolean`
-
-If true, forces the entry date to UTC. Helps with testing across timezones.
-
-#### store `boolean`
-
-If true, all entry contents will be archived without compression by default.
-
-#### zlib `object`
-
-Passed to node's [zlib](http://nodejs.org/api/zlib.html#zlib_options) module to control compression. Options may vary by node version.
-
-### Entry Data
-
-#### name `string` `required`
-
-Sets the entry name including internal path.
-
-#### date `string|Date`
-
-Sets the entry date. This can be any valid date string or instance. Defaults to current time in locale.
-
-#### store `boolean`
-
-If true, entry contents will be archived without compression.
-
-#### comment `string`
-
-Sets the entry comment.
-
-#### mode `number`
-
-Sets the entry permissions. Defaults to octal 0755 (directory) or 0644 (file).
-
-## Tar
-
-### Options
-
-#### gzip `boolean`
-
-Compresses the tar archive using gzip, default is false.
-
-#### gzipOptions `object`
-
-Passed to node's [zlib](http://nodejs.org/api/zlib.html#zlib_options) module to control compression. Options may vary by node version.
-
-### Entry Data
-
-#### name `string` `required`
-
-Sets the entry name including internal path.
-
-#### date `string|Date`
-
-Sets the entry date. This can be any valid date string or instance. Defaults to current time in locale.
-
-#### mode `number`
-
-Sets the entry permissions. Defaults to octal 0755 (directory) or 0644 (file).
-
-## Libraries
-
-Archiver makes use of several libraries/modules to avoid duplication of efforts.
-
-- [zip-stream](https://npmjs.org/package/zip-stream)
-- [tar-stream](https://npmjs.org/package/tar-stream)
-
-## Things of Interest
-
-- [Source Docs (coming soon)](https://docsrc.com/archiver/)
-- [Examples](https://github.com/ctalkington/node-archiver/blob/master/examples)
-- [Changelog](https://github.com/ctalkington/node-archiver/releases)
-- [Contributing](https://github.com/ctalkington/node-archiver/blob/master/CONTRIBUTING.md)
+# Archiver v0.11.0 [![Build Status](https://travis-ci.org/ctalkington/node-archiver.svg?branch=master)](https://travis-ci.org/ctalkington/node-archiver)
+
+a streaming interface for archive generation
+
+[![NPM](https://nodei.co/npm/archiver.png)](https://nodei.co/npm/archiver/)
+
+## Install
+
+```bash
+npm install archiver --save
+```
+
+You can also use `npm install https://github.com/ctalkington/node-archiver/archive/master.tar.gz` to test upcoming versions.
+
+## Archiver
+
+#### create(format, options)
+
+Creates an Archiver instance based on the format (zip, tar, etc) passed. Parameters can be passed directly to `Archiver` constructor for convenience.
+
+#### registerFormat(format, module)
+
+Registers an archive format. Format modules are essentially transform streams with a few required methods. They will be further documented once a formal spec is in place.
+
+### Instance Methods
+
+Inherits [Transform Stream](http://nodejs.org/api/stream.html#stream_class_stream_transform) methods.
+
+#### append(input, data)
+
+Appends an input source (text string, buffer, or stream) to the instance. When the instance has received, processed, and emitted the input, the `entry` event is fired.
+
+Replaced `#addFile` in v0.5.
+
+```js
+archive.append('string', { name:'string.txt' });
+archive.append(new Buffer('string'), { name:'buffer.txt' });
+archive.append(fs.createReadStream('mydir/file.txt'), { name:'stream.txt' });
+archive.append(null, { name:'dir/' });
+```
+
+#### bulk(mappings)
+
+Appends multiple entries from passed array of src-dest mappings. A lazystream wrapper is used to prevent issues with open file limits.
+
+Globbing patterns are supported through use of the [file-utils](https://github.com/SBoudrias/file-utils) package. Please note that multiple src files to single dest file (ie concat) is not supported.
+
+The `data` property can be set (per src-dest mapping) to define data for matched entries.
+
+```js
+archive.bulk([
+  { src: ['mydir/**'], data: { date: new Date() } },
+  { expand: true, cwd: 'mydir', src: ['**'], dest: 'newdir' }
+]);
+```
+
+For more detail on this feature, please see [BULK.md](https://github.com/ctalkington/node-archiver/blob/master/BULK.md).
+
+#### file(filepath, data)
+
+Appends a file given its filepath using a lazystream wrapper to prevent issues with open file limits. When the instance has received, processed, and emitted the file, the `entry` event is fired.
+
+```js
+archive.file('mydir/file.txt', { name:'file.txt' });
+```
+
+#### finalize()
+
+Finalizes the instance and prevents further appending to the archive structure (queue will continue til drained). The `end`, `close` or `finish` events on the destination stream may fire right after calling this method so you should set listeners beforehand to properly detect stream completion.
+
+*You must call this method to get a valid archive and end the instance stream.*
+
+#### pointer()
+
+Returns the current byte length emitted by archiver. Use this in your end callback to log generated size.
+
+## Events
+
+Inherits [Transform Stream](http://nodejs.org/api/stream.html#stream_class_stream_transform) events.
+
+#### entry
+
+Fired when the input has been received, processed, and emitted. Passes entry data as first argument.
+
+## Zip
+
+### Options
+
+#### comment `string`
+
+Sets the zip comment.
+
+#### forceUTC `boolean`
+
+If true, forces the entry date to UTC. Helps with testing across timezones.
+
+#### store `boolean`
+
+If true, all entry contents will be archived without compression by default.
+
+#### zlib `object`
+
+Passed to node's [zlib](http://nodejs.org/api/zlib.html#zlib_options) module to control compression. Options may vary by node version.
+
+### Entry Data
+
+#### name `string` `required`
+
+Sets the entry name including internal path.
+
+#### date `string|Date`
+
+Sets the entry date. This can be any valid date string or instance. Defaults to current time in locale.
+
+#### store `boolean`
+
+If true, entry contents will be archived without compression.
+
+#### comment `string`
+
+Sets the entry comment.
+
+#### mode `number`
+
+Sets the entry permissions. Defaults to octal 0755 (directory) or 0644 (file).
+
+## Tar
+
+### Options
+
+#### gzip `boolean`
+
+Compresses the tar archive using gzip, default is false.
+
+#### gzipOptions `object`
+
+Passed to node's [zlib](http://nodejs.org/api/zlib.html#zlib_options) module to control compression. Options may vary by node version.
+
+### Entry Data
+
+#### name `string` `required`
+
+Sets the entry name including internal path.
+
+#### date `string|Date`
+
+Sets the entry date. This can be any valid date string or instance. Defaults to current time in locale.
+
+#### mode `number`
+
+Sets the entry permissions. Defaults to octal 0755 (directory) or 0644 (file).
+
+## Libraries
+
+Archiver makes use of several libraries/modules to avoid duplication of efforts.
+
+- [zip-stream](https://npmjs.org/package/zip-stream)
+- [tar-stream](https://npmjs.org/package/tar-stream)
+
+## Things of Interest
+
+- [Source Docs (coming soon)](https://docsrc.com/archiver/)
+- [Examples](https://github.com/ctalkington/node-archiver/blob/master/examples)
+- [Changelog](https://github.com/ctalkington/node-archiver/releases)
+- [Contributing](https://github.com/ctalkington/node-archiver/blob/master/CONTRIBUTING.md)
 - [MIT License](https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/archiver.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/archiver.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/archiver.js
index bc6b750..ed509c7 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/archiver.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/archiver.js
@@ -1,42 +1,42 @@
-/**
- * node-archiver
- *
- * Copyright (c) 2012-2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
- */
-var ArchiverCore = require('./modules/core');
-var formatModules = {};
-
-var archiver = module.exports = function(format, options) {
-  return archiver.create(format, options);
-};
-
-archiver.create = function(format, options) {
-  if (formatModules[format]) {
-    var inst = new ArchiverCore(options);
-    inst.setModule(new formatModules[format](options));
-
-    return inst;
-  } else {
-    throw new Error('unknown format: ' + format);
-  }
-};
-
-archiver.registerFormat = function(format, module) {
-  if (module && typeof module === 'function' && typeof module.prototype.append === 'function') {
-    formatModules[format] = module;
-
-    // backwards compat
-    var compatName = 'create' + format.charAt(0).toUpperCase() + format.slice(1);
-    archiver[compatName] = function(options) {
-      return archiver.create(format, options);
-    };
-  } else {
-    throw new Error('format module invalid: ' + format);
-  }
-};
-
-archiver.registerFormat('zip', require('./modules/zip'));
-archiver.registerFormat('tar', require('./modules/tar'));
+/**
+ * node-archiver
+ *
+ * Copyright (c) 2012-2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
+ */
+var ArchiverCore = require('./modules/core');
+var formatModules = {};
+
+var archiver = module.exports = function(format, options) {
+  return archiver.create(format, options);
+};
+
+archiver.create = function(format, options) {
+  if (formatModules[format]) {
+    var inst = new ArchiverCore(options);
+    inst.setModule(new formatModules[format](options));
+
+    return inst;
+  } else {
+    throw new Error('unknown format: ' + format);
+  }
+};
+
+archiver.registerFormat = function(format, module) {
+  if (module && typeof module === 'function' && typeof module.prototype.append === 'function') {
+    formatModules[format] = module;
+
+    // backwards compat
+    var compatName = 'create' + format.charAt(0).toUpperCase() + format.slice(1);
+    archiver[compatName] = function(options) {
+      return archiver.create(format, options);
+    };
+  } else {
+    throw new Error('format module invalid: ' + format);
+  }
+};
+
+archiver.registerFormat('zip', require('./modules/zip'));
+archiver.registerFormat('tar', require('./modules/tar'));
 archiver.registerFormat('json', require('./modules/json'));
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/core/index.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/core/index.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/core/index.js
index a314ff6..d3c76fc 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/core/index.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/core/index.js
@@ -1,319 +1,319 @@
-/**
- * node-archiver
- *
- * Copyright (c) 2012-2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
- */
-var fs = require('fs');
-var inherits = require('util').inherits;
-var Transform = require('readable-stream').Transform;
-
-var async = require('async');
-
-var util = require('../../util');
-
-var Archiver = module.exports = function(options) {
-  options = this.options = util.defaults(options, {
-    highWaterMark: 1024 * 1024
-  });
-
-  Transform.call(this, options);
-
-  this._entries = [];
-  this._module = false;
-  this._pointer = 0;
-
-  this._queue = async.queue(this._onQueueTask.bind(this), 1);
-  this._queue.drain = this._onQueueDrain.bind(this);
-
-  this._state = {
-    finalize: false,
-    finalized: false,
-    modulePiped: false
-  };
-};
-
-inherits(Archiver, Transform);
-
-Archiver.prototype._append = function(filepath, data) {
-  data = data || {};
-
-  if (!data.name) {
-    data.name = filepath;
-  }
-
-  data.sourcePath = filepath;
-
-  this._queue.push({
-    data: data,
-    source: null,
-    deferredStat: true,
-    filepath: filepath
-  });
-};
-
-Archiver.prototype._moduleAppend = function(source, data, callback) {
-  this._module.append(source, data, callback);
-};
-
-Archiver.prototype._moduleFinalize = function() {
-  this._state.finalized = true;
-
-  if (typeof this._module.finalize === 'function') {
-    this._module.finalize();
-  } else if (typeof this._module.end === 'function') {
-    this._module.end();
-  } else {
-    this.emit('error', new Error('format module missing finalize and end method'));
-  }
-};
-
-Archiver.prototype._moduleSupports = function(key) {
-  this._module.supports = util.defaults(this._module.supports, {
-    directory: false
-  });
-
-  return this._module.supports[key];
-};
-
-Archiver.prototype._normalizeEntryData = function(data, stats) {
-  stats = stats || false;
-  data = util.defaults(data, {
-    type: 'file',
-    name: null,
-    date: null,
-    mode: null,
-    sourcePath: null
-  });
-
-  var isDir = data.type === 'directory';
-
-  if (data.name) {
-    data.name = util.sanitizePath(data.name);
-
-    if (data.name.slice(-1) === '/') {
-      isDir = true;
-      data.type = 'directory';
-    } else if (isDir) {
-      data.name += '/';
-    }
-  }
-
-  if (typeof data.mode === 'number') {
-    data.mode &= 0777;
-  } else if (stats) {
-    data.mode = stats.mode & 0777;
-  } else {
-    data.mode = isDir ? 0755 : 0644;
-  }
-
-  if (stats && data.date === null) {
-    data.date = stats.mtime;
-  }
-
-  data.date = util.dateify(data.date);
-
-  data._stats = stats;
-
-  return data;
-};
-
-Archiver.prototype._onModuleError = function(err) {
-  this.emit('error', err);
-};
-
-Archiver.prototype._onQueueDrain = function() {
-  if (this._state.finalize && !this._state.finalized && this._queue.idle()) {
-    this._moduleFinalize();
-  }
-};
-
-Archiver.prototype._onQueueTask = function(task, callback) {
-  var afterAppend = function(err, entry) {
-    if (err) {
-      this.emit('error', err);
-      callback();
-      return;
-    }
-
-    entry = entry || task.data;
-
-    this.emit('entry', entry);
-    this._entries.push(entry);
-
-    callback();
-  }.bind(this);
-
-  var afterStat = function(err, stats) {
-    if (err) {
-      this.emit('error', err);
-      callback();
-      return;
-    }
-
-    task = this._updateQueueTaskWithStats(task, stats);
-
-    if (task.source !== null) {
-      this._moduleAppend(task.source, task.data, afterAppend);
-    } else {
-      this.emit('error', new Error('unsupported entry: ' + task.filepath));
-      callback();
-      return;
-    }
-  }.bind(this);
-
-  if (task.deferredStat) {
-    fs.stat(task.filepath, afterStat);
-  } else {
-    this._moduleAppend(task.source, task.data, afterAppend);
-  }
-};
-
-Archiver.prototype._updateQueueTaskWithStats = function(task, stats) {
-  if (stats.isFile()) {
-    task.data.type = 'file';
-    task.data.sourceType = 'stream';
-    task.source = util.lazyReadStream(task.filepath);
-  } else if (stats.isDirectory() && this._moduleSupports('directory')) {
-    task.data.name = util.trailingSlashIt(task.data.name);
-    task.data.type = 'directory';
-    task.data.sourcePath = util.trailingSlashIt(task.filepath);
-    task.data.sourceType = 'buffer';
-    task.source = new Buffer(0);
-  } else {
-    return task;
-  }
-
-  task.data = this._normalizeEntryData(task.data, stats);
-  return task;
-};
-
-Archiver.prototype._pipeModuleOutput = function() {
-  this._module.on('error', this._onModuleError.bind(this));
-  this._module.pipe(this);
-
-  this._state.modulePiped = true;
-};
-
-Archiver.prototype._processFile = function(source, data, callback) {
-  this.emit('error', new Error('method not implemented'));
-};
-
-Archiver.prototype._transform = function(chunk, encoding, callback) {
-  if (chunk) {
-    this._pointer += chunk.length;
-  }
-
-  callback(null, chunk);
-};
-
-Archiver.prototype.append = function(source, data) {
-  if (this._state.finalize) {
-    this.emit('error', new Error('unable to append after calling finalize.'));
-    return this;
-  }
-
-  data = this._normalizeEntryData(data);
-
-  if (typeof data.name !== 'string' || data.name.length === 0) {
-    this.emit('error', new Error('entry name must be a non-empty string value'));
-    return this;
-  }
-
-  if (data.type === 'directory' && !this._moduleSupports('directory')) {
-    this.emit('error', new Error('entries of "directory" type not currently supported by this module'));
-    return this;
-  }
-
-  source = util.normalizeInputSource(source);
-
-  if (Buffer.isBuffer(source)) {
-    data.sourceType = 'buffer';
-  } else if (util.isStream(source)) {
-    data.sourceType = 'stream';
-  } else {
-    this.emit('error', new Error('input source must be valid Stream or Buffer instance'));
-    return this;
-  }
-
-  this._queue.push({
-    data: data,
-    source: source
-  });
-
-  return this;
-};
-
-Archiver.prototype.bulk = function(mappings) {
-  if (this._state.finalize) {
-    this.emit('error', new Error('unable to append after calling finalize.'));
-    return this;
-  }
-
-  if (!Array.isArray(mappings)) {
-    mappings = [mappings];
-  }
-
-  var self = this;
-  var files = util.file.normalizeFilesArray(mappings);
-
-  files.forEach(function(file){
-    var isExpandedPair = file.orig.expand || false;
-    var fileData = file.data || {};
-
-    file.src.forEach(function(filepath) {
-      var data = util._.extend({}, fileData);
-      var name = isExpandedPair ? file.dest : util.unixifyPath(file.dest || '', filepath);
-
-      if (name === '.') {
-        return;
-      }
-
-      data.name = name;
-      self._append(filepath, data);
-    });
-  });
-
-  return this;
-};
-
-Archiver.prototype.file = function(filepath, data) {
-  if (this._state.finalize) {
-    this.emit('error', new Error('unable to append after calling finalize.'));
-    return this;
-  }
-
-  if (typeof filepath !== 'string' || filepath.length === 0) {
-    this.emit('error', new Error('filepath must be a non-empty string value'));
-    return this;
-  }
-
-  this._append(filepath, data);
-
-  return this;
-};
-
-Archiver.prototype.finalize = function() {
-  this._state.finalize = true;
-
-  if (this._queue.idle()) {
-    this._moduleFinalize();
-  }
-
-  return this;
-};
-
-Archiver.prototype.setModule = function(module) {
-  if (this._state.modulePiped) {
-    this.emit('error', new Error('format module already set'));
-    return;
-  }
-
-  this._module = module;
-  this._pipeModuleOutput();
-};
-
-Archiver.prototype.pointer = function() {
-  return this._pointer;
+/**
+ * node-archiver
+ *
+ * Copyright (c) 2012-2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
+ */
+var fs = require('fs');
+var inherits = require('util').inherits;
+var Transform = require('readable-stream').Transform;
+
+var async = require('async');
+
+var util = require('../../util');
+
+var Archiver = module.exports = function(options) {
+  options = this.options = util.defaults(options, {
+    highWaterMark: 1024 * 1024
+  });
+
+  Transform.call(this, options);
+
+  this._entries = [];
+  this._module = false;
+  this._pointer = 0;
+
+  this._queue = async.queue(this._onQueueTask.bind(this), 1);
+  this._queue.drain = this._onQueueDrain.bind(this);
+
+  this._state = {
+    finalize: false,
+    finalized: false,
+    modulePiped: false
+  };
+};
+
+inherits(Archiver, Transform);
+
+Archiver.prototype._append = function(filepath, data) {
+  data = data || {};
+
+  if (!data.name) {
+    data.name = filepath;
+  }
+
+  data.sourcePath = filepath;
+
+  this._queue.push({
+    data: data,
+    source: null,
+    deferredStat: true,
+    filepath: filepath
+  });
+};
+
+Archiver.prototype._moduleAppend = function(source, data, callback) {
+  this._module.append(source, data, callback);
+};
+
+Archiver.prototype._moduleFinalize = function() {
+  this._state.finalized = true;
+
+  if (typeof this._module.finalize === 'function') {
+    this._module.finalize();
+  } else if (typeof this._module.end === 'function') {
+    this._module.end();
+  } else {
+    this.emit('error', new Error('format module missing finalize and end method'));
+  }
+};
+
+Archiver.prototype._moduleSupports = function(key) {
+  this._module.supports = util.defaults(this._module.supports, {
+    directory: false
+  });
+
+  return this._module.supports[key];
+};
+
+Archiver.prototype._normalizeEntryData = function(data, stats) {
+  stats = stats || false;
+  data = util.defaults(data, {
+    type: 'file',
+    name: null,
+    date: null,
+    mode: null,
+    sourcePath: null
+  });
+
+  var isDir = data.type === 'directory';
+
+  if (data.name) {
+    data.name = util.sanitizePath(data.name);
+
+    if (data.name.slice(-1) === '/') {
+      isDir = true;
+      data.type = 'directory';
+    } else if (isDir) {
+      data.name += '/';
+    }
+  }
+
+  if (typeof data.mode === 'number') {
+    data.mode &= 0777;
+  } else if (stats) {
+    data.mode = stats.mode & 0777;
+  } else {
+    data.mode = isDir ? 0755 : 0644;
+  }
+
+  if (stats && data.date === null) {
+    data.date = stats.mtime;
+  }
+
+  data.date = util.dateify(data.date);
+
+  data._stats = stats;
+
+  return data;
+};
+
+Archiver.prototype._onModuleError = function(err) {
+  this.emit('error', err);
+};
+
+Archiver.prototype._onQueueDrain = function() {
+  if (this._state.finalize && !this._state.finalized && this._queue.idle()) {
+    this._moduleFinalize();
+  }
+};
+
+Archiver.prototype._onQueueTask = function(task, callback) {
+  var afterAppend = function(err, entry) {
+    if (err) {
+      this.emit('error', err);
+      callback();
+      return;
+    }
+
+    entry = entry || task.data;
+
+    this.emit('entry', entry);
+    this._entries.push(entry);
+
+    callback();
+  }.bind(this);
+
+  var afterStat = function(err, stats) {
+    if (err) {
+      this.emit('error', err);
+      callback();
+      return;
+    }
+
+    task = this._updateQueueTaskWithStats(task, stats);
+
+    if (task.source !== null) {
+      this._moduleAppend(task.source, task.data, afterAppend);
+    } else {
+      this.emit('error', new Error('unsupported entry: ' + task.filepath));
+      callback();
+      return;
+    }
+  }.bind(this);
+
+  if (task.deferredStat) {
+    fs.stat(task.filepath, afterStat);
+  } else {
+    this._moduleAppend(task.source, task.data, afterAppend);
+  }
+};
+
+Archiver.prototype._updateQueueTaskWithStats = function(task, stats) {
+  if (stats.isFile()) {
+    task.data.type = 'file';
+    task.data.sourceType = 'stream';
+    task.source = util.lazyReadStream(task.filepath);
+  } else if (stats.isDirectory() && this._moduleSupports('directory')) {
+    task.data.name = util.trailingSlashIt(task.data.name);
+    task.data.type = 'directory';
+    task.data.sourcePath = util.trailingSlashIt(task.filepath);
+    task.data.sourceType = 'buffer';
+    task.source = new Buffer(0);
+  } else {
+    return task;
+  }
+
+  task.data = this._normalizeEntryData(task.data, stats);
+  return task;
+};
+
+Archiver.prototype._pipeModuleOutput = function() {
+  this._module.on('error', this._onModuleError.bind(this));
+  this._module.pipe(this);
+
+  this._state.modulePiped = true;
+};
+
+Archiver.prototype._processFile = function(source, data, callback) {
+  this.emit('error', new Error('method not implemented'));
+};
+
+Archiver.prototype._transform = function(chunk, encoding, callback) {
+  if (chunk) {
+    this._pointer += chunk.length;
+  }
+
+  callback(null, chunk);
+};
+
+Archiver.prototype.append = function(source, data) {
+  if (this._state.finalize) {
+    this.emit('error', new Error('unable to append after calling finalize.'));
+    return this;
+  }
+
+  data = this._normalizeEntryData(data);
+
+  if (typeof data.name !== 'string' || data.name.length === 0) {
+    this.emit('error', new Error('entry name must be a non-empty string value'));
+    return this;
+  }
+
+  if (data.type === 'directory' && !this._moduleSupports('directory')) {
+    this.emit('error', new Error('entries of "directory" type not currently supported by this module'));
+    return this;
+  }
+
+  source = util.normalizeInputSource(source);
+
+  if (Buffer.isBuffer(source)) {
+    data.sourceType = 'buffer';
+  } else if (util.isStream(source)) {
+    data.sourceType = 'stream';
+  } else {
+    this.emit('error', new Error('input source must be valid Stream or Buffer instance'));
+    return this;
+  }
+
+  this._queue.push({
+    data: data,
+    source: source
+  });
+
+  return this;
+};
+
+Archiver.prototype.bulk = function(mappings) {
+  if (this._state.finalize) {
+    this.emit('error', new Error('unable to append after calling finalize.'));
+    return this;
+  }
+
+  if (!Array.isArray(mappings)) {
+    mappings = [mappings];
+  }
+
+  var self = this;
+  var files = util.file.normalizeFilesArray(mappings);
+
+  files.forEach(function(file){
+    var isExpandedPair = file.orig.expand || false;
+    var fileData = file.data || {};
+
+    file.src.forEach(function(filepath) {
+      var data = util._.extend({}, fileData);
+      var name = isExpandedPair ? file.dest : util.unixifyPath(file.dest || '', filepath);
+
+      if (name === '.') {
+        return;
+      }
+
+      data.name = name;
+      self._append(filepath, data);
+    });
+  });
+
+  return this;
+};
+
+Archiver.prototype.file = function(filepath, data) {
+  if (this._state.finalize) {
+    this.emit('error', new Error('unable to append after calling finalize.'));
+    return this;
+  }
+
+  if (typeof filepath !== 'string' || filepath.length === 0) {
+    this.emit('error', new Error('filepath must be a non-empty string value'));
+    return this;
+  }
+
+  this._append(filepath, data);
+
+  return this;
+};
+
+Archiver.prototype.finalize = function() {
+  this._state.finalize = true;
+
+  if (this._queue.idle()) {
+    this._moduleFinalize();
+  }
+
+  return this;
+};
+
+Archiver.prototype.setModule = function(module) {
+  if (this._state.modulePiped) {
+    this.emit('error', new Error('format module already set'));
+    return;
+  }
+
+  this._module = module;
+  this._pipeModuleOutput();
+};
+
+Archiver.prototype.pointer = function() {
+  return this._pointer;
 };
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/json/index.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/json/index.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/json/index.js
index 001c449..9b6f857 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/json/index.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/json/index.js
@@ -1,71 +1,71 @@
-/**
- * node-archiver
- *
- * Copyright (c) 2012-2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
- */
-var inherits = require('util').inherits;
-var Transform = require('readable-stream').Transform;
-
-var crc32 = require('buffer-crc32');
-var util = require('../../util');
-
-var Json = module.exports = function(options) {
-  options = this.options = util.defaults(options, {});
-
-  Transform.call(this, options);
-
-  this.supports = {
-    directory: true
-  };
-
-  this.files = [];
-};
-
-inherits(Json, Transform);
-
-Json.prototype._transform = function(chunk, encoding, callback) {
-  callback(null, chunk);
-};
-
-Json.prototype._writeStringified = function() {
-  var fileString = JSON.stringify(this.files);
-  this.write(fileString);
-};
-
-Json.prototype.append = function(source, data, callback) {
-  var self = this;
-
-  data.crc32 = 0;
-
-  function onend(err, sourceBuffer) {
-    if (err) {
-      callback(err);
-      return;
-    }
-
-    data.size = sourceBuffer.length || 0;
-    data.crc32 = crc32.unsigned(sourceBuffer);
-
-    self.files.push(data);
-
-    callback(null, data);
-  }
-
-  if (data.sourceType === 'buffer') {
-    onend(null, source);
-  } else if (data.sourceType === 'stream') {
-    util.collectStream(source, onend);
-  }
-};
-
-Json.prototype.finalize = function(callback) {
-  callback = callback || function() {};
-
-  this._writeStringified();
-
-  this.end();
-
-  callback();
+/**
+ * node-archiver
+ *
+ * Copyright (c) 2012-2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
+ */
+var inherits = require('util').inherits;
+var Transform = require('readable-stream').Transform;
+
+var crc32 = require('buffer-crc32');
+var util = require('../../util');
+
+var Json = module.exports = function(options) {
+  options = this.options = util.defaults(options, {});
+
+  Transform.call(this, options);
+
+  this.supports = {
+    directory: true
+  };
+
+  this.files = [];
+};
+
+inherits(Json, Transform);
+
+Json.prototype._transform = function(chunk, encoding, callback) {
+  callback(null, chunk);
+};
+
+Json.prototype._writeStringified = function() {
+  var fileString = JSON.stringify(this.files);
+  this.write(fileString);
+};
+
+Json.prototype.append = function(source, data, callback) {
+  var self = this;
+
+  data.crc32 = 0;
+
+  function onend(err, sourceBuffer) {
+    if (err) {
+      callback(err);
+      return;
+    }
+
+    data.size = sourceBuffer.length || 0;
+    data.crc32 = crc32.unsigned(sourceBuffer);
+
+    self.files.push(data);
+
+    callback(null, data);
+  }
+
+  if (data.sourceType === 'buffer') {
+    onend(null, source);
+  } else if (data.sourceType === 'stream') {
+    util.collectStream(source, onend);
+  }
+};
+
+Json.prototype.finalize = function(callback) {
+  callback = callback || function() {};
+
+  this._writeStringified();
+
+  this.end();
+
+  callback();
 };
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/tar/index.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/tar/index.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/tar/index.js
index 5fba091..d3c2542 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/tar/index.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/tar/index.js
@@ -1,84 +1,84 @@
-/**
- * node-archiver
- *
- * Copyright (c) 2012-2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
- */
-var zlib = require('zlib');
-
-var engine = require('tar-stream');
-var util = require('../../util');
-
-var Tar = module.exports = function(options) {
-  options = this.options = util.defaults(options, {
-    gzip: false
-  });
-
-  if (typeof options.gzipOptions !== 'object') {
-    options.gzipOptions = {};
-  }
-
-  this.supports = {
-    directory: true
-  };
-
-  this.engine = engine.pack(options);
-  this.compressor = false;
-
-  if (options.gzip) {
-    this.compressor = zlib.createGzip(options.gzipOptions);
-    this.compressor.on('error', this._onCompressorError.bind(this));
-  }
-};
-
-Tar.prototype._onCompressorError = function(err) {
-  this.engine.emit('error', err);
-};
-
-Tar.prototype.append = function(source, data, callback) {
-  var self = this;
-
-  data.mtime = data.date;
-
-  function append(err, sourceBuffer) {
-    if (err) {
-      callback(err);
-      return;
-    }
-
-    self.engine.entry(data, sourceBuffer, function(err) {
-      callback(err, data);
-    });
-  }
-
-  if (data.sourceType === 'buffer') {
-    append(null, source);
-  } else if (data.sourceType === 'stream' && data._stats) {
-    data.size = data._stats.size;
-
-    var entry = self.engine.entry(data, function(err) {
-      callback(err, data);
-    });
-
-    source.pipe(entry);
-  } else if (data.sourceType === 'stream') {
-    util.collectStream(source, append);
-  }
-};
-
-Tar.prototype.finalize = function() {
-  this.engine.finalize();
-};
-
-Tar.prototype.on = function() {
-  return this.engine.on.apply(this.engine, arguments);
-};
-
-Tar.prototype.pipe = function(destination, options) {
-  if (this.compressor) {
-    return this.engine.pipe.apply(this.engine, [this.compressor]).pipe(destination, options);
-  } else {
-    return this.engine.pipe.apply(this.engine, arguments);
-  }
+/**
+ * node-archiver
+ *
+ * Copyright (c) 2012-2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
+ */
+var zlib = require('zlib');
+
+var engine = require('tar-stream');
+var util = require('../../util');
+
+var Tar = module.exports = function(options) {
+  options = this.options = util.defaults(options, {
+    gzip: false
+  });
+
+  if (typeof options.gzipOptions !== 'object') {
+    options.gzipOptions = {};
+  }
+
+  this.supports = {
+    directory: true
+  };
+
+  this.engine = engine.pack(options);
+  this.compressor = false;
+
+  if (options.gzip) {
+    this.compressor = zlib.createGzip(options.gzipOptions);
+    this.compressor.on('error', this._onCompressorError.bind(this));
+  }
+};
+
+Tar.prototype._onCompressorError = function(err) {
+  this.engine.emit('error', err);
+};
+
+Tar.prototype.append = function(source, data, callback) {
+  var self = this;
+
+  data.mtime = data.date;
+
+  function append(err, sourceBuffer) {
+    if (err) {
+      callback(err);
+      return;
+    }
+
+    self.engine.entry(data, sourceBuffer, function(err) {
+      callback(err, data);
+    });
+  }
+
+  if (data.sourceType === 'buffer') {
+    append(null, source);
+  } else if (data.sourceType === 'stream' && data._stats) {
+    data.size = data._stats.size;
+
+    var entry = self.engine.entry(data, function(err) {
+      callback(err, data);
+    });
+
+    source.pipe(entry);
+  } else if (data.sourceType === 'stream') {
+    util.collectStream(source, append);
+  }
+};
+
+Tar.prototype.finalize = function() {
+  this.engine.finalize();
+};
+
+Tar.prototype.on = function() {
+  return this.engine.on.apply(this.engine, arguments);
+};
+
+Tar.prototype.pipe = function(destination, options) {
+  if (this.compressor) {
+    return this.engine.pipe.apply(this.engine, [this.compressor]).pipe(destination, options);
+  } else {
+    return this.engine.pipe.apply(this.engine, arguments);
+  }
 };
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/zip/index.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/zip/index.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/zip/index.js
index 28c13d3..e00a106 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/zip/index.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/modules/zip/index.js
@@ -1,39 +1,39 @@
-/**
- * node-archiver
- *
- * Copyright (c) 2012-2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
- */
-var engine = require('zip-stream');
-var util = require('../../util');
-
-var Zip = module.exports = function(options) {
-  options = this.options = util.defaults(options, {
-    comment: '',
-    forceUTC: false,
-    store: false
-  });
-
-  this.supports = {
-    directory: true
-  };
-
-  this.engine = new engine(options);
-};
-
-Zip.prototype.append = function(source, data, callback) {
-  this.engine.entry(source, data, callback);
-};
-
-Zip.prototype.finalize = function() {
-  this.engine.finalize();
-};
-
-Zip.prototype.on = function() {
-  return this.engine.on.apply(this.engine, arguments);
-};
-
-Zip.prototype.pipe = function() {
-  return this.engine.pipe.apply(this.engine, arguments);
+/**
+ * node-archiver
+ *
+ * Copyright (c) 2012-2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
+ */
+var engine = require('zip-stream');
+var util = require('../../util');
+
+var Zip = module.exports = function(options) {
+  options = this.options = util.defaults(options, {
+    comment: '',
+    forceUTC: false,
+    store: false
+  });
+
+  this.supports = {
+    directory: true
+  };
+
+  this.engine = new engine(options);
+};
+
+Zip.prototype.append = function(source, data, callback) {
+  this.engine.entry(source, data, callback);
+};
+
+Zip.prototype.finalize = function() {
+  this.engine.finalize();
+};
+
+Zip.prototype.on = function() {
+  return this.engine.on.apply(this.engine, arguments);
+};
+
+Zip.prototype.pipe = function() {
+  return this.engine.pipe.apply(this.engine, arguments);
 };
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/file.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/file.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/file.js
index 1ecaae3..c398891 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/file.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/file.js
@@ -1,206 +1,206 @@
-/**
- * node-archiver
- *
- * Copyright (c) 2012-2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
- */
-var fs = require('fs');
-var path = require('path');
-
-var _ = require('lodash');
-var glob = require('glob');
-
-var file = module.exports = {};
-
-var pathSeparatorRe = /[\/\\]/g;
-
-// Process specified wildcard glob patterns or filenames against a
-// callback, excluding and uniquing files in the result set.
-var processPatterns = function(patterns, fn) {
-  // Filepaths to return.
-  var result = [];
-  // Iterate over flattened patterns array.
-  _.flatten(patterns).forEach(function(pattern) {
-    // If the first character is ! it should be omitted
-    var exclusion = pattern.indexOf('!') === 0;
-    // If the pattern is an exclusion, remove the !
-    if (exclusion) { pattern = pattern.slice(1); }
-    // Find all matching files for this pattern.
-    var matches = fn(pattern);
-    if (exclusion) {
-      // If an exclusion, remove matching files.
-      result = _.difference(result, matches);
-    } else {
-      // Otherwise add matching files.
-      result = _.union(result, matches);
-    }
-  });
-  return result;
-};
-
-// True if the file path exists.
-file.exists = function() {
-  var filepath = path.join.apply(path, arguments);
-  return fs.existsSync(filepath);
-};
-
-// Return an array of all file paths that match the given wildcard patterns.
-file.expand = function() {
-  var args = _.toArray(arguments);
-  // If the first argument is an options object, save those options to pass
-  // into the File.prototype.glob.sync method.
-  var options = _.isPlainObject(args[0]) ? args.shift() : {};
-  // Use the first argument if it's an Array, otherwise convert the arguments
-  // object to an array and use that.
-  var patterns = Array.isArray(args[0]) ? args[0] : args;
-  // Return empty set if there are no patterns or filepaths.
-  if (patterns.length === 0) { return []; }
-  // Return all matching filepaths.
-  var matches = processPatterns(patterns, function(pattern) {
-    // Find all matching files for this pattern.
-    return glob.sync(pattern, options);
-  });
-  // Filter result set?
-  if (options.filter) {
-    matches = matches.filter(function(filepath) {
-      filepath = path.join(options.cwd || '', filepath);
-      try {
-        if (typeof options.filter === 'function') {
-          return options.filter(filepath);
-        } else {
-          // If the file is of the right type and exists, this should work.
-          return fs.statSync(filepath)[options.filter]();
-        }
-      } catch(e) {
-        // Otherwise, it's probably not the right type.
-        return false;
-      }
-    });
-  }
-  return matches;
-};
-
-// Build a multi task "files" object dynamically.
-file.expandMapping = function(patterns, destBase, options) {
-  options = _.defaults({}, options, {
-    rename: function(destBase, destPath) {
-      return path.join(destBase || '', destPath);
-    }
-  });
-  var files = [];
-  var fileByDest = {};
-  // Find all files matching pattern, using passed-in options.
-  file.expand(options, patterns).forEach(function(src) {
-    var destPath = src;
-    // Flatten?
-    if (options.flatten) {
-      destPath = path.basename(destPath);
-    }
-    // Change the extension?
-    if (options.ext) {
-      destPath = destPath.replace(/(\.[^\/]*)?$/, options.ext);
-    }
-    // Generate destination filename.
-    var dest = options.rename(destBase, destPath, options);
-    // Prepend cwd to src path if necessary.
-    if (options.cwd) { src = path.join(options.cwd, src); }
-    // Normalize filepaths to be unix-style.
-    dest = dest.replace(pathSeparatorRe, '/');
-    src = src.replace(pathSeparatorRe, '/');
-    // Map correct src path to dest path.
-    if (fileByDest[dest]) {
-      // If dest already exists, push this src onto that dest's src array.
-      fileByDest[dest].src.push(src);
-    } else {
-      // Otherwise create a new src-dest file mapping object.
-      files.push({
-        src: [src],
-        dest: dest,
-      });
-      // And store a reference for later use.
-      fileByDest[dest] = files[files.length - 1];
-    }
-  });
-  return files;
-};
-
-// reusing bits of grunt's multi-task source normalization
-file.normalizeFilesArray = function(data) {
-  var files = [];
-
-  data.forEach(function(obj) {
-    var prop;
-    if ('src' in obj || 'dest' in obj) {
-      files.push(obj);
-    }
-  });
-
-  if (files.length === 0) {
-    return [];
-  }
-
-  files = _(files).chain().forEach(function(obj) {
-    if (!('src' in obj) || !obj.src) { return; }
-    // Normalize .src properties to flattened array.
-    if (Array.isArray(obj.src)) {
-      obj.src = _.flatten(obj.src);
-    } else {
-      obj.src = [obj.src];
-    }
-  }).map(function(obj) {
-    // Build options object, removing unwanted properties.
-    var expandOptions = _.extend({}, obj);
-    delete expandOptions.src;
-    delete expandOptions.dest;
-
-    // Expand file mappings.
-    if (obj.expand) {
-      return file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) {
-        // Copy obj properties to result.
-        var result = _.extend({}, obj);
-        // Make a clone of the orig obj available.
-        result.orig = _.extend({}, obj);
-        // Set .src and .dest, processing both as templates.
-        result.src = mapObj.src;
-        result.dest = mapObj.dest;
-        // Remove unwanted properties.
-        ['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) {
-          delete result[prop];
-        });
-        return result;
-      });
-    }
-
-    // Copy obj properties to result, adding an .orig property.
-    var result = _.extend({}, obj);
-    // Make a clone of the orig obj available.
-    result.orig = _.extend({}, obj);
-
-    if ('src' in result) {
-      // Expose an expand-on-demand getter method as .src.
-      Object.defineProperty(result, 'src', {
-        enumerable: true,
-        get: function fn() {
-          var src;
-          if (!('result' in fn)) {
-            src = obj.src;
-            // If src is an array, flatten it. Otherwise, make it into an array.
-            src = Array.isArray(src) ? _.flatten(src) : [src];
-            // Expand src files, memoizing result.
-            fn.result = file.expand(expandOptions, src);
-          }
-          return fn.result;
-        }
-      });
-    }
-
-    if ('dest' in result) {
-      result.dest = obj.dest;
-    }
-
-    return result;
-  }).flatten().value();
-
-  return files;
+/**
+ * node-archiver
+ *
+ * Copyright (c) 2012-2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
+ */
+var fs = require('fs');
+var path = require('path');
+
+var _ = require('lodash');
+var glob = require('glob');
+
+var file = module.exports = {};
+
+var pathSeparatorRe = /[\/\\]/g;
+
+// Process specified wildcard glob patterns or filenames against a
+// callback, excluding and uniquing files in the result set.
+var processPatterns = function(patterns, fn) {
+  // Filepaths to return.
+  var result = [];
+  // Iterate over flattened patterns array.
+  _.flatten(patterns).forEach(function(pattern) {
+    // If the first character is ! it should be omitted
+    var exclusion = pattern.indexOf('!') === 0;
+    // If the pattern is an exclusion, remove the !
+    if (exclusion) { pattern = pattern.slice(1); }
+    // Find all matching files for this pattern.
+    var matches = fn(pattern);
+    if (exclusion) {
+      // If an exclusion, remove matching files.
+      result = _.difference(result, matches);
+    } else {
+      // Otherwise add matching files.
+      result = _.union(result, matches);
+    }
+  });
+  return result;
+};
+
+// True if the file path exists.
+file.exists = function() {
+  var filepath = path.join.apply(path, arguments);
+  return fs.existsSync(filepath);
+};
+
+// Return an array of all file paths that match the given wildcard patterns.
+file.expand = function() {
+  var args = _.toArray(arguments);
+  // If the first argument is an options object, save those options to pass
+  // into the File.prototype.glob.sync method.
+  var options = _.isPlainObject(args[0]) ? args.shift() : {};
+  // Use the first argument if it's an Array, otherwise convert the arguments
+  // object to an array and use that.
+  var patterns = Array.isArray(args[0]) ? args[0] : args;
+  // Return empty set if there are no patterns or filepaths.
+  if (patterns.length === 0) { return []; }
+  // Return all matching filepaths.
+  var matches = processPatterns(patterns, function(pattern) {
+    // Find all matching files for this pattern.
+    return glob.sync(pattern, options);
+  });
+  // Filter result set?
+  if (options.filter) {
+    matches = matches.filter(function(filepath) {
+      filepath = path.join(options.cwd || '', filepath);
+      try {
+        if (typeof options.filter === 'function') {
+          return options.filter(filepath);
+        } else {
+          // If the file is of the right type and exists, this should work.
+          return fs.statSync(filepath)[options.filter]();
+        }
+      } catch(e) {
+        // Otherwise, it's probably not the right type.
+        return false;
+      }
+    });
+  }
+  return matches;
+};
+
+// Build a multi task "files" object dynamically.
+file.expandMapping = function(patterns, destBase, options) {
+  options = _.defaults({}, options, {
+    rename: function(destBase, destPath) {
+      return path.join(destBase || '', destPath);
+    }
+  });
+  var files = [];
+  var fileByDest = {};
+  // Find all files matching pattern, using passed-in options.
+  file.expand(options, patterns).forEach(function(src) {
+    var destPath = src;
+    // Flatten?
+    if (options.flatten) {
+      destPath = path.basename(destPath);
+    }
+    // Change the extension?
+    if (options.ext) {
+      destPath = destPath.replace(/(\.[^\/]*)?$/, options.ext);
+    }
+    // Generate destination filename.
+    var dest = options.rename(destBase, destPath, options);
+    // Prepend cwd to src path if necessary.
+    if (options.cwd) { src = path.join(options.cwd, src); }
+    // Normalize filepaths to be unix-style.
+    dest = dest.replace(pathSeparatorRe, '/');
+    src = src.replace(pathSeparatorRe, '/');
+    // Map correct src path to dest path.
+    if (fileByDest[dest]) {
+      // If dest already exists, push this src onto that dest's src array.
+      fileByDest[dest].src.push(src);
+    } else {
+      // Otherwise create a new src-dest file mapping object.
+      files.push({
+        src: [src],
+        dest: dest,
+      });
+      // And store a reference for later use.
+      fileByDest[dest] = files[files.length - 1];
+    }
+  });
+  return files;
+};
+
+// reusing bits of grunt's multi-task source normalization
+file.normalizeFilesArray = function(data) {
+  var files = [];
+
+  data.forEach(function(obj) {
+    var prop;
+    if ('src' in obj || 'dest' in obj) {
+      files.push(obj);
+    }
+  });
+
+  if (files.length === 0) {
+    return [];
+  }
+
+  files = _(files).chain().forEach(function(obj) {
+    if (!('src' in obj) || !obj.src) { return; }
+    // Normalize .src properties to flattened array.
+    if (Array.isArray(obj.src)) {
+      obj.src = _.flatten(obj.src);
+    } else {
+      obj.src = [obj.src];
+    }
+  }).map(function(obj) {
+    // Build options object, removing unwanted properties.
+    var expandOptions = _.extend({}, obj);
+    delete expandOptions.src;
+    delete expandOptions.dest;
+
+    // Expand file mappings.
+    if (obj.expand) {
+      return file.expandMapping(obj.src, obj.dest, expandOptions).map(function(mapObj) {
+        // Copy obj properties to result.
+        var result = _.extend({}, obj);
+        // Make a clone of the orig obj available.
+        result.orig = _.extend({}, obj);
+        // Set .src and .dest, processing both as templates.
+        result.src = mapObj.src;
+        result.dest = mapObj.dest;
+        // Remove unwanted properties.
+        ['expand', 'cwd', 'flatten', 'rename', 'ext'].forEach(function(prop) {
+          delete result[prop];
+        });
+        return result;
+      });
+    }
+
+    // Copy obj properties to result, adding an .orig property.
+    var result = _.extend({}, obj);
+    // Make a clone of the orig obj available.
+    result.orig = _.extend({}, obj);
+
+    if ('src' in result) {
+      // Expose an expand-on-demand getter method as .src.
+      Object.defineProperty(result, 'src', {
+        enumerable: true,
+        get: function fn() {
+          var src;
+          if (!('result' in fn)) {
+            src = obj.src;
+            // If src is an array, flatten it. Otherwise, make it into an array.
+            src = Array.isArray(src) ? _.flatten(src) : [src];
+            // Expand src files, memoizing result.
+            fn.result = file.expand(expandOptions, src);
+          }
+          return fn.result;
+        }
+      });
+    }
+
+    if ('dest' in result) {
+      result.dest = obj.dest;
+    }
+
+    return result;
+  }).flatten().value();
+
+  return files;
 };
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/index.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/index.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/index.js
index 0646151..02030fb 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/index.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/lib/util/index.js
@@ -1,103 +1,103 @@
-/**
- * node-archiver
- *
- * Copyright (c) 2012-2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
- */
-var fs = require('fs');
-var path = require('path');
-
-var Stream = require('stream').Stream;
-var PassThrough = require('readable-stream').PassThrough;
-
-var util = module.exports = {};
-
-util._ = require('lodash');
-util.lazystream = require('lazystream');
-util.file = require('./file');
-
-util.collectStream = function(source, callback) {
-  var collection = [];
-  var size = 0;
-
-  source.on('error', callback);
-
-  source.on('data', function(chunk) {
-    collection.push(chunk);
-    size += chunk.length;
-  });
-
-  source.on('end', function() {
-    var buf = new Buffer(size, 'utf8');
-    var offset = 0;
-
-    collection.forEach(function(data) {
-      data.copy(buf, offset);
-      offset += data.length;
-    });
-
-    callback(null, buf);
-  });
-};
-
-util.dateify = function(dateish) {
-  dateish = dateish || new Date();
-
-  if (dateish instanceof Date) {
-    dateish = dateish;
-  } else if (typeof dateish === 'string') {
-    dateish = new Date(dateish);
-  } else {
-    dateish = new Date();
-  }
-
-  return dateish;
-};
-
-// this is slightly different from lodash version
-util.defaults = function(object, source, guard) {
-  var args = arguments;
-  args[0] = args[0] || {};
-
-  return util._.defaults.apply(util._, args);
-};
-
-util.isStream = function(source) {
-  return source instanceof Stream;
-};
-
-util.lazyReadStream = function(filepath) {
-  return new util.lazystream.Readable(function() {
-    return fs.createReadStream(filepath);
-  });
-};
-
-util.normalizeInputSource = function(source) {
-  if (source === null) {
-    return new Buffer(0);
-  } else if (typeof source === 'string') {
-    return new Buffer(source);
-  } else if (util.isStream(source) && !source._readableState) {
-    var normalized = new PassThrough();
-    source.pipe(normalized);
-
-    return normalized;
-  }
-
-  return source;
-};
-
-util.sanitizePath = function() {
-  var filepath = path.join.apply(path, arguments);
-  return filepath.replace(/\\/g, '/').replace(/:/g, '').replace(/^\/+/, '');
-};
-
-util.trailingSlashIt = function(str) {
-  return str.slice(-1) !== '/' ? str + '/' : str;
-};
-
-util.unixifyPath = function() {
-  var filepath = path.join.apply(path, arguments);
-  return filepath.replace(/\\/g, '/');
+/**
+ * node-archiver
+ *
+ * Copyright (c) 2012-2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-archiver/blob/master/LICENSE-MIT
+ */
+var fs = require('fs');
+var path = require('path');
+
+var Stream = require('stream').Stream;
+var PassThrough = require('readable-stream').PassThrough;
+
+var util = module.exports = {};
+
+util._ = require('lodash');
+util.lazystream = require('lazystream');
+util.file = require('./file');
+
+util.collectStream = function(source, callback) {
+  var collection = [];
+  var size = 0;
+
+  source.on('error', callback);
+
+  source.on('data', function(chunk) {
+    collection.push(chunk);
+    size += chunk.length;
+  });
+
+  source.on('end', function() {
+    var buf = new Buffer(size, 'utf8');
+    var offset = 0;
+
+    collection.forEach(function(data) {
+      data.copy(buf, offset);
+      offset += data.length;
+    });
+
+    callback(null, buf);
+  });
+};
+
+util.dateify = function(dateish) {
+  dateish = dateish || new Date();
+
+  if (dateish instanceof Date) {
+    dateish = dateish;
+  } else if (typeof dateish === 'string') {
+    dateish = new Date(dateish);
+  } else {
+    dateish = new Date();
+  }
+
+  return dateish;
+};
+
+// this is slightly different from lodash version
+util.defaults = function(object, source, guard) {
+  var args = arguments;
+  args[0] = args[0] || {};
+
+  return util._.defaults.apply(util._, args);
+};
+
+util.isStream = function(source) {
+  return source instanceof Stream;
+};
+
+util.lazyReadStream = function(filepath) {
+  return new util.lazystream.Readable(function() {
+    return fs.createReadStream(filepath);
+  });
+};
+
+util.normalizeInputSource = function(source) {
+  if (source === null) {
+    return new Buffer(0);
+  } else if (typeof source === 'string') {
+    return new Buffer(source);
+  } else if (util.isStream(source) && !source._readableState) {
+    var normalized = new PassThrough();
+    source.pipe(normalized);
+
+    return normalized;
+  }
+
+  return source;
+};
+
+util.sanitizePath = function() {
+  var filepath = path.join.apply(path, arguments);
+  return filepath.replace(/\\/g, '/').replace(/:/g, '').replace(/^\/+/, '');
+};
+
+util.trailingSlashIt = function(str) {
+  return str.slice(-1) !== '/' ? str + '/' : str;
+};
+
+util.unixifyPath = function() {
+  var filepath = path.join.apply(path, arguments);
+  return filepath.replace(/\\/g, '/');
 };
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/LICENSE-MIT
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/LICENSE-MIT b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/LICENSE-MIT
index 819b403..56420a6 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/LICENSE-MIT
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/LICENSE-MIT
@@ -1,22 +1,22 @@
-Copyright (c) 2014 Chris Talkington, contributors.
-
-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
+Copyright (c) 2014 Chris Talkington, contributors.
+
+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.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/README.md
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/README.md b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/README.md
index e4ec56c..3fc4346 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/README.md
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/README.md
@@ -1,105 +1,105 @@
-# zip-stream v0.4.1 [![Build Status](https://travis-ci.org/ctalkington/node-zip-stream.svg?branch=master)](https://travis-ci.org/ctalkington/node-zip-stream)
-
-zip-stream is a streaming zip archive generator based on the `ZipArchiveOutputStream` prototype found in the [compress-commons](https://www.npmjs.org/package/compress-commons) project.
-
-It was originally created to be a successor to [zipstream](https://npmjs.org/package/zipstream).
-
-[![NPM](https://nodei.co/npm/zip-stream.png)](https://nodei.co/npm/zip-stream/)
-
-### Install
-
-```bash
-npm install zip-stream --save
-```
-
-You can also use `npm install https://github.com/ctalkington/node-zip-stream/archive/master.tar.gz` to test upcoming versions.
-
-### Usage
-
-This module is meant to be wrapped internally by other modules and therefore lacks any queue management. This means you have to wait until the previous entry has been fully consumed to add another. Nested callbacks should be used to add multiple entries. There are modules like [async](https://npmjs.org/package/async) that ease the so called "callback hell".
-
-If you want a module that handles entry queueing and much more, you should check out [archiver](https://npmjs.org/package/archiver) which uses this module internally.
-
-```js
-var packer = require('zip-stream');
-var archive = new packer(); // OR new packer(options)
-
-archive.on('error', function(err) {
-  throw err;
-});
-
-// pipe archive where you want it (ie fs, http, etc)
-// listen to the destination's end, close, or finish event
-
-archive.entry('string contents', { name: 'string.txt' }, function(err, entry) {
-  if (err) throw err;
-  archive.entry(null, { name: 'directory/' }, function(err, entry) {
-    if (err) throw err;
-    archive.finish();
-  });
-});
-```
-
-### Instance API
-
-#### getBytesWritten()
-
-Returns the current number of bytes written to this stream.
-
-#### entry(input, data, callback(err, data))
-
-Appends an input source (text string, buffer, or stream) to the instance. When the instance has received, processed, and emitted the input, the callback is fired.
-
-#### finish()
-
-Finalizes the instance. You should listen to the destination stream's `end`/`close`/`finish` event to know when all output has been safely consumed. (`finalize` is aliased for back-compat)
-
-### Instance Options
-
-#### comment `string`
-
-Sets the zip comment.
-
-#### store `boolean`
-
-If true, all entry contents will be archived without compression by default.
-
-#### zlib `object`
-
-Passed to node's [zlib](http://nodejs.org/api/zlib.html#zlib_options) module to control compression. Options may vary by node version.
-
-### Entry Data
-
-#### name `string` `required`
-
-Sets the entry name including internal path.
-
-#### type `string`
-
-Sets the entry type. Defaults to `file` or `directory` if name ends with trailing slash.
-
-#### date `string|Date`
-
-Sets the entry date. This can be any valid date string or instance. Defaults to current time in locale.
-
-#### store `boolean`
-
-If true, entry contents will be archived without compression.
-
-#### comment `string`
-
-Sets the entry comment.
-
-#### mode `number`
-
-Sets the entry permissions.
-
-## Things of Interest
-
-- [Releases](https://github.com/ctalkington/node-zip-stream/releases)
-- [Contributing](https://github.com/ctalkington/node-zip-stream/blob/master/CONTRIBUTING.md)
-- [MIT License](https://github.com/ctalkington/node-zip-stream/blob/master/LICENSE-MIT)
-
-## Credits
-
+# zip-stream v0.4.1 [![Build Status](https://travis-ci.org/ctalkington/node-zip-stream.svg?branch=master)](https://travis-ci.org/ctalkington/node-zip-stream)
+
+zip-stream is a streaming zip archive generator based on the `ZipArchiveOutputStream` prototype found in the [compress-commons](https://www.npmjs.org/package/compress-commons) project.
+
+It was originally created to be a successor to [zipstream](https://npmjs.org/package/zipstream).
+
+[![NPM](https://nodei.co/npm/zip-stream.png)](https://nodei.co/npm/zip-stream/)
+
+### Install
+
+```bash
+npm install zip-stream --save
+```
+
+You can also use `npm install https://github.com/ctalkington/node-zip-stream/archive/master.tar.gz` to test upcoming versions.
+
+### Usage
+
+This module is meant to be wrapped internally by other modules and therefore lacks any queue management. This means you have to wait until the previous entry has been fully consumed to add another. Nested callbacks should be used to add multiple entries. There are modules like [async](https://npmjs.org/package/async) that ease the so called "callback hell".
+
+If you want a module that handles entry queueing and much more, you should check out [archiver](https://npmjs.org/package/archiver) which uses this module internally.
+
+```js
+var packer = require('zip-stream');
+var archive = new packer(); // OR new packer(options)
+
+archive.on('error', function(err) {
+  throw err;
+});
+
+// pipe archive where you want it (ie fs, http, etc)
+// listen to the destination's end, close, or finish event
+
+archive.entry('string contents', { name: 'string.txt' }, function(err, entry) {
+  if (err) throw err;
+  archive.entry(null, { name: 'directory/' }, function(err, entry) {
+    if (err) throw err;
+    archive.finish();
+  });
+});
+```
+
+### Instance API
+
+#### getBytesWritten()
+
+Returns the current number of bytes written to this stream.
+
+#### entry(input, data, callback(err, data))
+
+Appends an input source (text string, buffer, or stream) to the instance. When the instance has received, processed, and emitted the input, the callback is fired.
+
+#### finish()
+
+Finalizes the instance. You should listen to the destination stream's `end`/`close`/`finish` event to know when all output has been safely consumed. (`finalize` is aliased for back-compat)
+
+### Instance Options
+
+#### comment `string`
+
+Sets the zip comment.
+
+#### store `boolean`
+
+If true, all entry contents will be archived without compression by default.
+
+#### zlib `object`
+
+Passed to node's [zlib](http://nodejs.org/api/zlib.html#zlib_options) module to control compression. Options may vary by node version.
+
+### Entry Data
+
+#### name `string` `required`
+
+Sets the entry name including internal path.
+
+#### type `string`
+
+Sets the entry type. Defaults to `file` or `directory` if name ends with trailing slash.
+
+#### date `string|Date`
+
+Sets the entry date. This can be any valid date string or instance. Defaults to current time in locale.
+
+#### store `boolean`
+
+If true, entry contents will be archived without compression.
+
+#### comment `string`
+
+Sets the entry comment.
+
+#### mode `number`
+
+Sets the entry permissions.
+
+## Things of Interest
+
+- [Releases](https://github.com/ctalkington/node-zip-stream/releases)
+- [Contributing](https://github.com/ctalkington/node-zip-stream/blob/master/CONTRIBUTING.md)
+- [MIT License](https://github.com/ctalkington/node-zip-stream/blob/master/LICENSE-MIT)
+
+## Credits
+
 Concept inspired by Antoine van Wel's [zipstream](https://npmjs.org/package/zipstream) module, which is no longer being updated.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/util/index.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/util/index.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/util/index.js
index 0b5a468..221d0af 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/util/index.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/util/index.js
@@ -1,103 +1,103 @@
-/**
- * node-zip-stream
- *
- * Copyright (c) 2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-zip-stream/blob/master/LICENSE-MIT
- */
-var fs = require('fs');
-var path = require('path');
-
-var Stream = require('stream').Stream;
-var PassThrough = require('readable-stream').PassThrough;
-
-var _ = require('lodash');
-
-var util = module.exports = {};
-
-util.convertDateTimeDos = function(input) {
-  return new Date(
-    ((input >> 25) & 0x7f) + 1980,
-    ((input >> 21) & 0x0f) - 1,
-    (input >> 16) & 0x1f,
-    (input >> 11) & 0x1f,
-    (input >> 5) & 0x3f,
-    (input & 0x1f) << 1
-  );
-};
-
-util.dateify = function(dateish) {
-  dateish = dateish || new Date();
-
-  if (dateish instanceof Date) {
-    dateish = dateish;
-  } else if (typeof dateish === 'string') {
-    dateish = new Date(dateish);
-  } else {
-    dateish = new Date();
-  }
-
-  return dateish;
-};
-
-// this is slightly different from lodash version
-util.defaults = function(object, source, guard) {
-  var args = arguments;
-  args[0] = args[0] || {};
-
-  return _.defaults.apply(_, args);
-};
-
-util.dosDateTime = function(d, utc) {
-  d = (d instanceof Date) ? d : util.dateify(d);
-  utc = utc || false;
-
-  var year = utc ? d.getUTCFullYear() : d.getFullYear();
-
-  if (year < 1980) {
-    return 2162688; // 1980-1-1 00:00:00
-  } else if (year >= 2044) {
-    return 2141175677; // 2043-12-31 23:59:58
-  }
-
-  var val = {
-    year: year,
-    month: utc ? d.getUTCMonth() : d.getMonth(),
-    date: utc ? d.getUTCDate() : d.getDate(),
-    hours: utc ? d.getUTCHours() : d.getHours(),
-    minutes: utc ? d.getUTCMinutes() : d.getMinutes(),
-    seconds: utc ? d.getUTCSeconds() : d.getSeconds()
-  };
-
-  return ((val.year-1980) << 25) | ((val.month+1) << 21) | (val.date << 16) |
-    (val.hours << 11) | (val.minutes << 5) | (val.seconds / 2);
-};
-
-util.isStream = function(source) {
-  return source instanceof Stream;
-};
-
-util.normalizeInputSource = function(source) {
-  if (source === null) {
-    return new Buffer(0);
-  } else if (typeof source === 'string') {
-    return new Buffer(source);
-  } else if (util.isStream(source) && !source._readableState) {
-    var normalized = new PassThrough();
-    source.pipe(normalized);
-
-    return normalized;
-  }
-
-  return source;
-};
-
-util.sanitizePath = function() {
-  var filepath = path.join.apply(path, arguments);
-  return filepath.replace(/\\/g, '/').replace(/:/g, '').replace(/^\/+/, '');
-};
-
-util.unixifyPath = function() {
-  var filepath = path.join.apply(path, arguments);
-  return filepath.replace(/\\/g, '/');
+/**
+ * node-zip-stream
+ *
+ * Copyright (c) 2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-zip-stream/blob/master/LICENSE-MIT
+ */
+var fs = require('fs');
+var path = require('path');
+
+var Stream = require('stream').Stream;
+var PassThrough = require('readable-stream').PassThrough;
+
+var _ = require('lodash');
+
+var util = module.exports = {};
+
+util.convertDateTimeDos = function(input) {
+  return new Date(
+    ((input >> 25) & 0x7f) + 1980,
+    ((input >> 21) & 0x0f) - 1,
+    (input >> 16) & 0x1f,
+    (input >> 11) & 0x1f,
+    (input >> 5) & 0x3f,
+    (input & 0x1f) << 1
+  );
+};
+
+util.dateify = function(dateish) {
+  dateish = dateish || new Date();
+
+  if (dateish instanceof Date) {
+    dateish = dateish;
+  } else if (typeof dateish === 'string') {
+    dateish = new Date(dateish);
+  } else {
+    dateish = new Date();
+  }
+
+  return dateish;
+};
+
+// this is slightly different from lodash version
+util.defaults = function(object, source, guard) {
+  var args = arguments;
+  args[0] = args[0] || {};
+
+  return _.defaults.apply(_, args);
+};
+
+util.dosDateTime = function(d, utc) {
+  d = (d instanceof Date) ? d : util.dateify(d);
+  utc = utc || false;
+
+  var year = utc ? d.getUTCFullYear() : d.getFullYear();
+
+  if (year < 1980) {
+    return 2162688; // 1980-1-1 00:00:00
+  } else if (year >= 2044) {
+    return 2141175677; // 2043-12-31 23:59:58
+  }
+
+  var val = {
+    year: year,
+    month: utc ? d.getUTCMonth() : d.getMonth(),
+    date: utc ? d.getUTCDate() : d.getDate(),
+    hours: utc ? d.getUTCHours() : d.getHours(),
+    minutes: utc ? d.getUTCMinutes() : d.getMinutes(),
+    seconds: utc ? d.getUTCSeconds() : d.getSeconds()
+  };
+
+  return ((val.year-1980) << 25) | ((val.month+1) << 21) | (val.date << 16) |
+    (val.hours << 11) | (val.minutes << 5) | (val.seconds / 2);
+};
+
+util.isStream = function(source) {
+  return source instanceof Stream;
+};
+
+util.normalizeInputSource = function(source) {
+  if (source === null) {
+    return new Buffer(0);
+  } else if (typeof source === 'string') {
+    return new Buffer(source);
+  } else if (util.isStream(source) && !source._readableState) {
+    var normalized = new PassThrough();
+    source.pipe(normalized);
+
+    return normalized;
+  }
+
+  return source;
+};
+
+util.sanitizePath = function() {
+  var filepath = path.join.apply(path, arguments);
+  return filepath.replace(/\\/g, '/').replace(/:/g, '').replace(/^\/+/, '');
+};
+
+util.unixifyPath = function() {
+  var filepath = path.join.apply(path, arguments);
+  return filepath.replace(/\\/g, '/');
 };
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cordova-firefoxos/blob/325bb661/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/zip-stream.js
----------------------------------------------------------------------
diff --git a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/zip-stream.js b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/zip-stream.js
index d13960b..898ab82 100644
--- a/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/zip-stream.js
+++ b/node_modules/node-firefox-install-app/node_modules/zip-folder/node_modules/archiver/node_modules/zip-stream/lib/zip-stream.js
@@ -1,110 +1,110 @@
-/**
- * node-zip-stream
- *
- * Copyright (c) 2014 Chris Talkington, contributors.
- * Licensed under the MIT license.
- * https://github.com/ctalkington/node-zip-stream/blob/master/LICENSE-MIT
- */
-var inherits = require('util').inherits;
-
-var ZipArchiveOutputStream = require('compress-commons').ZipArchiveOutputStream;
-var ZipArchiveEntry = require('compress-commons').ZipArchiveEntry;
-
-var util = require('./util');
-
-var ZipStream = module.exports = function(options) {
-  if (!(this instanceof ZipStream)) {
-    return new ZipStream(options);
-  }
-
-  options = this.options = options || {};
-  options.zlib = options.zlib || {};
-
-  ZipArchiveOutputStream.call(this, options);
-
-  if (typeof options.level === 'number' && options.level >= 0) {
-    options.zlib.level = options.level;
-    delete options.level;
-  }
-
-  if (options.zlib.level && options.zlib.level === 0) {
-    options.store = true;
-  }
-
-  if (options.comment && options.comment.length > 0) {
-    this.setComment(options.comment);
-  }
-};
-
-inherits(ZipStream, ZipArchiveOutputStream);
-
-ZipStream.prototype._normalizeFileData = function(data) {
-  data = util.defaults(data, {
-    type: 'file',
-    name: null,
-    date: null,
-    mode: null,
-    store: this.options.store,
-    comment: ''
-  });
-
-  var isDir = data.type === 'directory';
-
-  if (data.name) {
-    data.name = util.sanitizePath(data.name);
-
-    if (data.name.slice(-1) === '/') {
-      isDir = true;
-      data.type = 'directory';
-    } else if (isDir) {
-      data.name += '/';
-    }
-  }
-
-  if (isDir) {
-    data.store = true;
-  }
-
-  data.date = util.dateify(data.date);
-
-  return data;
-};
-
-ZipStream.prototype.entry = function(source, data, callback) {
-  if (typeof callback !== 'function') {
-    callback = this._emitErrorCallback.bind(this);
-  }
-
-  data = this._normalizeFileData(data);
-
-  if (data.type !== 'file' && data.type !== 'directory') {
-    callback(new Error(data.type + ' entries not currently supported'));
-    return;
-  }
-
-  if (typeof data.name !== 'string' || data.name.length === 0) {
-    callback(new Error('entry name must be a non-empty string value'));
-    return;
-  }
-
-  var entry = new ZipArchiveEntry(data.name);
-  entry.setTime(data.date);
-
-  if (data.store) {
-    entry.setMethod(0);
-  }
-
-  if (data.comment.length > 0) {
-    entry.setComment(data.comment);
-  }
-
-  if (typeof data.mode === 'number') {
-    entry.setUnixMode(data.mode);
-  }
-
-  return ZipArchiveOutputStream.prototype.entry.call(this, entry, source, callback);
-};
-
-ZipStream.prototype.finalize = function() {
-  this.finish();
+/**
+ * node-zip-stream
+ *
+ * Copyright (c) 2014 Chris Talkington, contributors.
+ * Licensed under the MIT license.
+ * https://github.com/ctalkington/node-zip-stream/blob/master/LICENSE-MIT
+ */
+var inherits = require('util').inherits;
+
+var ZipArchiveOutputStream = require('compress-commons').ZipArchiveOutputStream;
+var ZipArchiveEntry = require('compress-commons').ZipArchiveEntry;
+
+var util = require('./util');
+
+var ZipStream = module.exports = function(options) {
+  if (!(this instanceof ZipStream)) {
+    return new ZipStream(options);
+  }
+
+  options = this.options = options || {};
+  options.zlib = options.zlib || {};
+
+  ZipArchiveOutputStream.call(this, options);
+
+  if (typeof options.level === 'number' && options.level >= 0) {
+    options.zlib.level = options.level;
+    delete options.level;
+  }
+
+  if (options.zlib.level && options.zlib.level === 0) {
+    options.store = true;
+  }
+
+  if (options.comment && options.comment.length > 0) {
+    this.setComment(options.comment);
+  }
+};
+
+inherits(ZipStream, ZipArchiveOutputStream);
+
+ZipStream.prototype._normalizeFileData = function(data) {
+  data = util.defaults(data, {
+    type: 'file',
+    name: null,
+    date: null,
+    mode: null,
+    store: this.options.store,
+    comment: ''
+  });
+
+  var isDir = data.type === 'directory';
+
+  if (data.name) {
+    data.name = util.sanitizePath(data.name);
+
+    if (data.name.slice(-1) === '/') {
+      isDir = true;
+      data.type = 'directory';
+    } else if (isDir) {
+      data.name += '/';
+    }
+  }
+
+  if (isDir) {
+    data.store = true;
+  }
+
+  data.date = util.dateify(data.date);
+
+  return data;
+};
+
+ZipStream.prototype.entry = function(source, data, callback) {
+  if (typeof callback !== 'function') {
+    callback = this._emitErrorCallback.bind(this);
+  }
+
+  data = this._normalizeFileData(data);
+
+  if (data.type !== 'file' && data.type !== 'directory') {
+    callback(new Error(data.type + ' entries not currently supported'));
+    return;
+  }
+
+  if (typeof data.name !== 'string' || data.name.length === 0) {
+    callback(new Error('entry name must be a non-empty string value'));
+    return;
+  }
+
+  var entry = new ZipArchiveEntry(data.name);
+  entry.setTime(data.date);
+
+  if (data.store) {
+    entry.setMethod(0);
+  }
+
+  if (data.comment.length > 0) {
+    entry.setComment(data.comment);
+  }
+
+  if (typeof data.mode === 'number') {
+    entry.setUnixMode(data.mode);
+  }
+
+  return ZipArchiveOutputStream.prototype.entry.call(this, entry, source, callback);
+};
+
+ZipStream.prototype.finalize = function() {
+  this.finish();
 };
\ No newline at end of file


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


Mime
View raw message