unpackzip.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. var JSZip = require("jszip");
  2. var async = require("async");
  3. function unpackzip(emitter) {
  4. return function(f) {
  5. if (!f) {
  6. var p = new Promise(function(resolve, reject) {
  7. reject("no file");
  8. })
  9. return p
  10. }
  11. var p = new Promise(function(resolve, reject) {
  12. JSZip.loadAsync(f) // 1) read the Blob
  13. .then(function(zip) {
  14. var obj = {};
  15. if (zip.files["namespace.manifest"]) {
  16. zip.file("namespace.manifest").async("string")
  17. .then(function(data) {
  18. emitter.emit("namespace", JSON.parse(data), cont)
  19. })
  20. } else {
  21. emitter.emit("nonamespace", cont)
  22. }
  23. function cont() {
  24. async.mapSeries(zip.files, function(z, next) {
  25. if (z.dir) {} else {
  26. zip.file(z.name).async("string")
  27. .then(function(data) {
  28. if (z.name.indexOf(".json") > -1) {
  29. emitter.emit("json", z.name, JSON.parse(data))
  30. } else {
  31. if (z.name !== "namespace.manifest") {
  32. emitter.emit("file", z.name, (data))
  33. }
  34. }
  35. next()
  36. })
  37. }
  38. }, function(err, done) {
  39. emitter.emit("done")
  40. resolve(obj);
  41. })
  42. }
  43. }, function(e) {
  44. reject(e)
  45. });
  46. })
  47. return p
  48. }
  49. }
  50. module.exports = unpackzip;