12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- var JSZip = require("jszip");
- var async = require("async");
- function unpackzip(emitter) {
- return function(f) {
- if (!f) {
- var p = new Promise(function(resolve, reject) {
- reject("no file");
- })
- return p
- }
- var p = new Promise(function(resolve, reject) {
- JSZip.loadAsync(f) // 1) read the Blob
- .then(function(zip) {
- var obj = {};
- if (zip.files["namespace.manifest"]) {
- zip.file("namespace.manifest").async("string")
- .then(function(data) {
- emitter.emit("namespace", JSON.parse(data), cont)
- })
- } else {
- emitter.emit("nonamespace", cont)
- }
- function cont() {
- async.mapSeries(zip.files, function(z, next) {
- if (z.dir) {} else {
- zip.file(z.name).async("string")
- .then(function(data) {
- if (z.name.indexOf(".json") > -1) {
- emitter.emit("json", z.name, JSON.parse(data))
- } else {
- if (z.name !== "namespace.manifest") {
- emitter.emit("file", z.name, (data))
- }
- }
- next()
- })
- }
- }, function(err, done) {
- emitter.emit("done")
- resolve(obj);
- })
- }
- }, function(e) {
- reject(e)
- });
- })
- return p
- }
- }
- module.exports = unpackzip;
|