generatezip.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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(".js") === ofilename.length-3) {
  16. console.log("JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ",ofilename, file.data.length);
  17. zip.file(ofilename, file.data);
  18. } else {
  19. if (ofilename.indexOf("namespace.manifest") === 0) {
  20. zip.file(ofilename, JSON.stringify(file.data, true, 2))
  21. } else {
  22. if (typeof(file) === "object" && ofilename.indexOf(".json") === -1) {
  23. zip.file(ofilename + ".json", JSON.stringify(file, true, 2))
  24. } else {
  25. zip.file(ofilename, file)
  26. }
  27. }
  28. }
  29. next()
  30. }, function(err, result) {
  31. zip.generateAsync({
  32. type: returner,
  33. compression: "DEFLATE",
  34. compressionOptions: {
  35. level: 9
  36. }
  37. }).then(function(blob) {
  38. callback(null, {
  39. filename: endfilename,
  40. blob: blob
  41. })
  42. }, function(err) {
  43. callback(err)
  44. });
  45. })
  46. }
  47. module.exports = generatezip;