var returner; if (typeof(window) !== "undefined") { returner = "blob" } else { returner = "nodebuffer" } var JSZip = require("jszip"); var async = require("async"); var _ = require("lodash"); function generatezip(endfilename, obj, callback) { var filenames = _.keys(obj); var zip = new JSZip(); async.mapSeries(filenames, function(ofilename, next) { var file = obj[ofilename]; if (ofilename.indexOf(".js") === ofilename.length-3) { console.log("JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",ofilename, file.data.length); zip.file(ofilename, file.data); } else { if (ofilename.indexOf("namespace.manifest") === 0) { zip.file(ofilename, JSON.stringify(file.data, true, 2)) } else { if (typeof(file) === "object" && ofilename.indexOf(".json") === -1) { zip.file(ofilename + ".json", JSON.stringify(file, true, 2)) } else { zip.file(ofilename, file) } } } next() }, function(err, result) { zip.generateAsync({ type: returner, compression: "DEFLATE", compressionOptions: { level: 9 } }).then(function(blob) { callback(null, { filename: endfilename, blob: blob }) }, function(err) { callback(err) }); }) } module.exports = generatezip;