blob: d07f636ab0bc35b307fb5fb010e856c1acdb792e [file] [log] [blame]
/**
* node-archiver
*
* Copyright (c) 2012-2014 Chris Talkington, contributors.
* Licensed under the MIT license.
* https://github.com/archiverjs/node-archiver/blob/master/LICENSE-MIT
*/
var ArchiverCore = require('./core');
var formats = {};
var archiver = module.exports = function(format, options) {
return archiver.create(format, options);
};
archiver.create = function(format, options) {
if (formats[format]) {
var instance = new ArchiverCore(options);
instance.setFormat(format);
instance.setModule(new formats[format](options));
return instance;
} else {
throw new Error('create(' + format + '): format not registered');
}
};
archiver.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;
// backwards compat - to be removed in 0.14
var compatName = 'create' + format.charAt(0).toUpperCase() + format.slice(1);
archiver[compatName] = function(options) {
return archiver.create(format, options);
};
};
archiver.registerFormat('zip', require('./plugins/zip'));
archiver.registerFormat('tar', require('./plugins/tar'));
archiver.registerFormat('json', require('./plugins/json'));