CoolFace
Apppublic

TrinetraLabs/Placebo_AI

sourceHugging Faceupdated 2mo agoView on Hugging Face
0likes
load.js89 linesDownload Raw Back to lib
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