TrinetraLabs/Placebo_AI
0
1"use strict";2var utils = require("./utils");3var external = require("./external");4var utf8 = require("./utf8");5var ZipEntries = require("./zipEntries");6var Crc32Probe = require("./stream/Crc32Probe");7var nodejsUtils = require("./nodejsUtils");8 9/**10 * Check the CRC32 of an entry.11 * @param {ZipEntry} zipEntry the zip entry to check.12 * @return {Promise} the result.13 */14function checkEntryCRC32(zipEntry) {15 return new external.Promise(function (resolve, reject) {16 var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());17 worker.on("error", function (e) {18 reject(e);19 })20 .on("end", function () {21 if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {22 reject(new Error("Corrupted zip : CRC32 mismatch"));23 } else {24 resolve();25 }26 })27 .resume();28 });29}30 31module.exports = function (data, options) {32 var zip = this;33 options = utils.extend(options || {}, {34 base64: false,35 checkCRC32: false,36 optimizedBinaryString: false,37 createFolders: false,38 decodeFileName: utf8.utf8decode39 });40 41 if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {42 return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file."));43 }44 45 return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64)46 .then(function (data) {47 var zipEntries = new ZipEntries(options);48 zipEntries.load(data);49 return zipEntries;50 }).then(function checkCRC32(zipEntries) {51 var promises = [external.Promise.resolve(zipEntries)];52 var files = zipEntries.files;53 if (options.checkCRC32) {54 for (var i = 0; i < files.length; i++) {55 promises.push(checkEntryCRC32(files[i]));56 }57 }58 return external.Promise.all(promises);59 }).then(function addFiles(results) {60 var zipEntries = results.shift();61 var files = zipEntries.files;62 for (var i = 0; i < files.length; i++) {63 var input = files[i];64 65 var unsafeName = input.fileNameStr;66 var safeName = utils.resolve(input.fileNameStr);67 68 zip.file(safeName, input.decompressed, {69 binary: true,70 optimizedBinaryString: true,71 date: input.date,72 dir: input.dir,73 comment: input.fileCommentStr.length ? input.fileCommentStr : null,74 unixPermissions: input.unixPermissions,75 dosPermissions: input.dosPermissions,76 createFolders: options.createFolders77 });78 if (!input.dir) {79 zip.file(safeName).unsafeOriginalName = unsafeName;80 }81 }82 if (zipEntries.zipComment.length) {83 zip.comment = zipEntries.zipComment;84 }85 86 return zip;87 });88};89 