devshare
Version:
Library to communicate with devshare development sharing platform.
73 lines (55 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.zipFileSystem = exports.createZip = undefined;
var _each2 = require('lodash/each');
var _each3 = _interopRequireDefault(_each2);
var _jszip = require('jszip');
var _jszip2 = _interopRequireDefault(_jszip);
var _nodeSafeFilesaver = require('node-safe-filesaver');
var _config = require('../config');
var _firebaser = require('./firebaser');
var _file = require('../project/file-system/file');
var _file2 = _interopRequireDefault(_file);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var createZip = exports.createZip = function createZip(relativePath, directory) {
var zip = new _jszip2.default();
var promiseArray = [];
var handleZip = function handleZip(fbChildren) {
(0, _each3.default)(fbChildren, function (child) {
if (!child.meta || child.meta.entityType === 'folder') {
delete child.meta;
return handleZip(child);
}
var promise = (0, _file2.default)(relativePath, child.meta.path).getContent().then(function (content) {
return zip.file(child.meta.path, content);
});
promiseArray.push(promise);
});
};
handleZip(directory);
var projectName = relativePath[relativePath.length - 1];
return Promise.all(promiseArray).then(function () {
return zip.generateAsync({ type: 'blob' }).then(function (content) {
return (0, _nodeSafeFilesaver.saveAs)(content, '' + projectName + _config.zipSuffix + '.zip');
}).catch(function (error) {
return Promise.reject(error);
});
});
};
/**
* @description Create a zip file with all of the files within a project's file system
* Note: Firepad is used to get the file's contents for zipping
*/
var zipFileSystem = exports.zipFileSystem = function zipFileSystem(_ref, relativePath) {
var owner = _ref.owner,
name = _ref.name;
return (0, _firebaser.get)(relativePath)().then(function (content) {
return createZip(relativePath, content);
});
};
exports.default = {
createZip: createZip,
zipFileSystem: zipFileSystem
};