/** | |
* Archiver Vending | |
* | |
* @ignore | |
* @license [MIT]{@link https://github.com/archiverjs/node-archiver/blob/master/LICENSE} | |
* @copyright (c) 2012-2014 Chris Talkington, contributors. | |
*/ | |
var Archiver = require('./lib/core'); | |
var formats = {}; | |
/** | |
* Dispenses a new Archiver instance. | |
* | |
* @constructor | |
* @param {String} format The archive format to use. | |
* @param {Object} options See [Archiver]{@link Archiver} | |
* @return {Archiver} | |
*/ | |
var vending = function(format, options) { | |
return vending.create(format, options); | |
}; | |
/** | |
* Creates a new Archiver instance. | |
* | |
* @param {String} format The archive format to use. | |
* @param {Object} options See [Archiver]{@link Archiver} | |
* @return {Archiver} | |
*/ | |
vending.create = function(format, options) { | |
if (formats[format]) { | |
var instance = new Archiver(format, options); | |
instance.setFormat(format); | |
instance.setModule(new formats[format](options)); | |
return instance; | |
} else { | |
throw new Error('create(' + format + '): format not registered'); | |
} | |
}; | |
/** | |
* Registers a format for use with archiver. | |
* | |
* @param {String} format The name of the format. | |
* @param {Function} module The function for archiver to interact with. | |
* @return void | |
*/ | |
vending.registerFormat = function(format, module) { | |
if (formats[format]) { | |
throw new Error('register(' + format + '): format already registered'); | |
} | |
if (typeof module !== 'function') { | |
throw new Error('register(' + format + '): format module invalid'); | |
} | |
if (typeof module.prototype.append !== 'function' || typeof module.prototype.finalize !== 'function') { | |
throw new Error('register(' + format + '): format module missing methods'); | |
} | |
formats[format] = module; | |
}; | |
vending.registerFormat('zip', require('./lib/plugins/zip')); | |
vending.registerFormat('tar', require('./lib/plugins/tar')); | |
vending.registerFormat('json', require('./lib/plugins/json')); | |
module.exports = vending; |