generatezip.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. var returner;
  2. if (typeof(window) !== "undefined") {
  3. returner = "blob"
  4. } else {
  5. returner = "nodebuffer"
  6. }
  7. var JSZip = require("jszip");
  8. var async = require("async");
  9. var _ = require("lodash");
  10. function generatezip(endfilename, obj, callback) {
  11. var filenames = _.keys(obj);
  12. var zip = new JSZip();
  13. async.mapSeries(filenames, function(ofilename, next) {
  14. var file = obj[ofilename];
  15. if (ofilename.indexOf("namespace.manifest") === 0) {
  16. zip.file(ofilename, JSON.stringify(file.data, true, 2))
  17. } else {
  18. if (typeof(file) === "object" && ofilename.indexOf(".json") === -1) {
  19. zip.file(ofilename + ".json", JSON.stringify(file, true, 2))
  20. } else {
  21. zip.file(ofilename, file)
  22. }
  23. }
  24. next()
  25. }, function(err, result) {
  26. zip.generateAsync({
  27. type: returner,
  28. compression: "DEFLATE",
  29. compressionOptions: {
  30. level: 9
  31. }
  32. }).then(function(blob) {
  33. callback(null, {
  34. filename: endfilename,
  35. blob: blob
  36. })
  37. }, function(err) {
  38. callback(err)
  39. });
  40. })
  41. }
  42. module.exports = generatezip;