UNPKG

jscrambler

Version:
130 lines (110 loc) 11.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.zip = zip; exports.unzip = unzip; var _lodash = require('lodash.size'); var _lodash2 = _interopRequireDefault(_lodash); var _temp = require('temp'); var _temp2 = _interopRequireDefault(_temp); var _jszip = require('jszip'); var _jszip2 = _interopRequireDefault(_jszip); var _fsExtra = require('fs-extra'); var _path = require('path'); var _q = require('q'); var _util = require('util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var debug = !!process.env.DEBUG; // TODO Replace `sync` functions with async versions function zip(files, cwd) { debug && console.log('Zipping files', (0, _util.inspect)(files)); var deferred = (0, _q.defer)(); // Flag to detect if any file was added to the zip archive var hasFiles = false; // Sanitize `cwd` if (cwd) { cwd = (0, _path.normalize)(cwd); } // If it's already a zip file if (files.length === 1 && /^.*\.zip$/.test(files[0])) { hasFiles = true; (0, _fsExtra.outputFileSync)(_temp2.default.openSync({ suffix: '.zip' }).path, (0, _fsExtra.readFileSync)(files[0])); } else { var _zip = new _jszip2.default(); for (var i = 0, l = files.length; i < l; ++i) { // Sanitise path if (typeof files[i] === 'string') { files[i] = (0, _path.normalize)(files[i]); if (files[i].indexOf('../') === 0) { files[i] = (0, _path.resolve)(files[i]); } } // Bypass unwanted patterns from `files` if (/.*\.(git|hg)(\/.*|$)/.test(files[i].path || files[i])) { continue; } var buffer = void 0, name = void 0; var sPath = void 0; if (cwd && files[i].indexOf && files[i].indexOf(cwd) !== 0) { sPath = (0, _path.join)(cwd, files[i]); } else { sPath = files[i]; } // If buffer if (files[i].contents) { name = (0, _path.relative)(files[i].cwd, files[i].path); buffer = files[i].contents; } // Else if it's a path and not a directory else if (!(0, _fsExtra.statSync)(sPath).isDirectory()) { if (cwd && files[i].indexOf && files[i].indexOf(cwd) === 0) { name = files[i].substring(cwd.length); } else { name = files[i]; } buffer = (0, _fsExtra.readFileSync)(sPath); } // Else if it's a directory path else { _zip.folder(sPath); } if (name) { hasFiles = true; _zip.file(name, buffer); } } if (hasFiles) { var tempFile = _temp2.default.openSync({ suffix: '.zip' }); (0, _fsExtra.outputFileSync)(tempFile.path, _zip.generate({ type: 'nodebuffer' }), { encoding: 'base64' }); files[0] = tempFile.path; files.length = 1; deferred.resolve(_zip); } else { throw new Error('No source files found. If you intend to send a whole directory sufix your path with "**" (e.g. ./my-directory/**)'); } } return deferred.promise; } function unzip(zipFile, dest) { var zip = new _jszip2.default(zipFile); var _size = (0, _lodash2.default)(zip.files); for (var file in zip.files) { if (!zip.files[file].options.dir) { var buffer = zip.file(file).asNodeBuffer(); if (typeof dest === 'function') { dest(buffer, file); } else if (dest) { var destPath; var lastDestChar = dest[dest.length - 1]; if (_size === 1 && lastDestChar !== '/' && lastDestChar !== '\\') { destPath = dest; } else { destPath = (0, _path.join)(dest, file); } (0, _fsExtra.outputFileSync)(destPath, buffer); } } } } //# sourceMappingURL=data:application/json;base64,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Q0FBWDtBQUNEO0FBQ0QscUNBQWUsUUFBZixFQUF5QixNQUF6QjtBQUNEO0FBQ0Y7QUFDRjtBQUNGIiwiZmlsZSI6InppcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE8gUmVwbGFjZSBgc3luY2AgZnVuY3Rpb25zIHdpdGggYXN5bmMgdmVyc2lvbnNcblxuaW1wb3J0IHNpemUgZnJvbSAnbG9kYXNoLnNpemUnO1xuaW1wb3J0IHRlbXAgZnJvbSAndGVtcCc7XG5pbXBvcnQgSlNaaXAgZnJvbSAnanN6aXAnO1xuaW1wb3J0IHtyZWFkRmlsZVN5bmMsIHN0YXRTeW5jLCBvdXRwdXRGaWxlU3luY30gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHtub3JtYWxpemUsIHJlc29sdmUsIHJlbGF0aXZlLCBqb2lufSBmcm9tICdwYXRoJztcbmltcG9ydCB7ZGVmZXJ9IGZyb20gJ3EnO1xuaW1wb3J0IHtpbnNwZWN0fSBmcm9tICd1dGlsJztcblxuY29uc3QgZGVidWcgPSAhIXByb2Nlc3MuZW52LkRFQlVHO1xuXG5leHBvcnQgZnVuY3Rpb24gemlwIChmaWxlcywgY3dkKSB7XG4gIGRlYnVnICYmIGNvbnNvbGUubG9nKCdaaXBwaW5nIGZpbGVzJywgaW5zcGVjdChmaWxlcykpO1xuICBjb25zdCBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gIC8vIEZsYWcgdG8gZGV0ZWN0IGlmIGFueSBmaWxlIHdhcyBhZGRlZCB0byB0aGUgemlwIGFyY2hpdmVcbiAgdmFyIGhhc0ZpbGVzID0gZmFsc2U7XG4gIC8vIFNhbml0aXplIGBjd2RgXG4gIGlmIChjd2QpIHtcbiAgICBjd2QgPSBub3JtYWxpemUoY3dkKTtcbiAgfVxuICAvLyBJZiBpdCdzIGFscmVhZHkgYSB6aXAgZmlsZVxuICBpZiAoZmlsZXMubGVuZ3RoID09PSAxICYmIC9eLipcXC56aXAkLy50ZXN0KGZpbGVzWzBdKSkge1xuICAgIGhhc0ZpbGVzID0gdHJ1ZTtcbiAgICBvdXRwdXRGaWxlU3luYyh0ZW1wLm9wZW5TeW5jKHtzdWZmaXg6ICcuemlwJ30pLnBhdGgsIHJlYWRGaWxlU3luYyhmaWxlc1swXSkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHppcCA9IG5ldyBKU1ppcCgpO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZmlsZXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAvLyBTYW5pdGlzZSBwYXRoXG4gICAgICBpZiAodHlwZW9mIGZpbGVzW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICBmaWxlc1tpXSA9IG5vcm1hbGl6ZShmaWxlc1tpXSk7XG4gICAgICAgIGlmIChmaWxlc1tpXS5pbmRleE9mKCcuLi8nKSA9PT0gMCkge1xuICAgICAgICAgIGZpbGVzW2ldID0gcmVzb2x2ZShmaWxlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEJ5cGFzcyB1bndhbnRlZCBwYXR0ZXJucyBmcm9tIGBmaWxlc2BcbiAgICAgIGlmICgvLipcXC4oZ2l0fGhnKShcXC8uKnwkKS8udGVzdChmaWxlc1tpXS5wYXRoIHx8IGZpbGVzW2ldKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBidWZmZXIsIG5hbWU7XG4gICAgICBsZXQgc1BhdGg7XG4gICAgICBpZiAoY3dkICYmIGZpbGVzW2ldLmluZGV4T2YgJiYgZmlsZXNbaV0uaW5kZXhPZihjd2QpICE9PSAwKSB7XG4gICAgICAgIHNQYXRoID0gam9pbihjd2QsIGZpbGVzW2ldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNQYXRoID0gZmlsZXNbaV07XG4gICAgICB9XG4gICAgICAvLyBJZiBidWZmZXJcbiAgICAgIGlmIChmaWxlc1tpXS5jb250ZW50cykge1xuICAgICAgICBuYW1lID0gcmVsYXRpdmUoZmlsZXNbaV0uY3dkLCBmaWxlc1tpXS5wYXRoKTtcbiAgICAgICAgYnVmZmVyID0gZmlsZXNbaV0uY29udGVudHM7XG4gICAgICB9XG4gICAgICAvLyBFbHNlIGlmIGl0J3MgYSBwYXRoIGFuZCBub3QgYSBkaXJlY3RvcnlcbiAgICAgIGVsc2UgaWYgKCFzdGF0U3luYyhzUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBpZiAoY3dkICYmIGZpbGVzW2ldLmluZGV4T2YgJiYgZmlsZXNbaV0uaW5kZXhPZihjd2QpID09PSAwKSB7XG4gICAgICAgICAgbmFtZSA9IGZpbGVzW2ldLnN1YnN0cmluZyhjd2QubGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuYW1lID0gZmlsZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgYnVmZmVyID0gcmVhZEZpbGVTeW5jKHNQYXRoKTtcbiAgICAgIH1cbiAgICAgIC8vIEVsc2UgaWYgaXQncyBhIGRpcmVjdG9yeSBwYXRoXG4gICAgICBlbHNlIHtcbiAgICAgICAgemlwLmZvbGRlcihzUGF0aCk7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBoYXNGaWxlcyA9IHRydWU7XG4gICAgICAgIHppcC5maWxlKG5hbWUsIGJ1ZmZlcik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChoYXNGaWxlcykge1xuICAgICAgdmFyIHRlbXBGaWxlID0gdGVtcC5vcGVuU3luYyh7c3VmZml4OiAnLnppcCd9KTtcbiAgICAgIG91dHB1dEZpbGVTeW5jKHRlbXBGaWxlLnBhdGgsIHppcC5nZW5lcmF0ZSh7dHlwZTogJ25vZGVidWZmZXInfSksIHtlbmNvZGluZzogJ2Jhc2U2NCd9KTtcbiAgICAgIGZpbGVzWzBdID0gdGVtcEZpbGUucGF0aDtcbiAgICAgIGZpbGVzLmxlbmd0aCA9IDE7XG4gICAgICBkZWZlcnJlZC5yZXNvbHZlKHppcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc291cmNlIGZpbGVzIGZvdW5kLiBJZiB5b3UgaW50ZW5kIHRvIHNlbmQgYSB3aG9sZSBkaXJlY3Rvcnkgc3VmaXggeW91ciBwYXRoIHdpdGggXCIqKlwiIChlLmcuIC4vbXktZGlyZWN0b3J5LyoqKScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZWZlcnJlZC5wcm9taXNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW56aXAgKHppcEZpbGUsIGRlc3QpIHtcbiAgY29uc3QgemlwID0gbmV3IEpTWmlwKHppcEZpbGUpO1xuICBjb25zdCBfc2l6ZSA9IHNpemUoemlwLmZpbGVzKTtcblxuICBmb3IgKGxldCBmaWxlIGluIHppcC5maWxlcykge1xuICAgIGlmICghemlwLmZpbGVzW2ZpbGVdLm9wdGlvbnMuZGlyKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSB6aXAuZmlsZShmaWxlKS5hc05vZGVCdWZmZXIoKTtcblxuICAgICAgaWYgKHR5cGVvZiBkZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRlc3QoYnVmZmVyLCBmaWxlKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVzdCkge1xuICAgICAgICB2YXIgZGVzdFBhdGg7XG5cbiAgICAgICAgY29uc3QgbGFzdERlc3RDaGFyID0gZGVzdFtkZXN0Lmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoX3NpemUgPT09IDEgJiYgbGFzdERlc3RDaGFyICE9PSAnLycgJiYgbGFzdERlc3RDaGFyICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICBkZXN0UGF0aCA9IGRlc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVzdFBhdGggPSBqb2luKGRlc3QsIGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dEZpbGVTeW5jKGRlc3RQYXRoLCBidWZmZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19