How to create a ZIP archive in Total.js?
- check if the following command works in your OS $ zip --version
- this example uses operations which are supported in Total.js +v2.4.0
Create an operation
E.g. /definitions/operations.js:
const Exec = require('child_process').exec;
const OPTIONS = {};
NEWOPERATION('compress', function(error, value, callback) {
    // value.path
    // value.filename
    var isFile = U.getExtension(value.path) !== '';
    var target = '*';
    if (isFile) {
        target = U.getName(value.path);
        OPTIONS.cwd = value.path.substring(0, value.path.length - target.length);
    } else
        OPTIONS.cwd = value.path;
    // Exclude directory "/tmp/"
    // Exec('zip --exclude=*/tmp/* -r {0} *'.format(value.filename)
    Exec('zip -r {0} {1}'.format(value.filename, target), OPTIONS, function(err, response) {
        err && error.push(err);
        callback(value.filename);
    });
});
Usage
You can execute the below code anywhere in your Total.js application:
// Compress a directory:
OPERATION('compress', { path: '/home/documents/', filename: '/home/documents.zip' }, function(err, filename) {
    console.log(err, filename);
});
// Compress Total.js "databases" directory:
OPERATION('compress', { path: F.path.databases(), filename: F.path.public('databases.zip') }, function(err, filename) {
    console.log(err, filename);
});
// Compress a file:
OPERATION('compress', { path: '/home/documents/total.js', filename: '/home/total.zip' }, function(err, filename) {
    console.log(err, filename);
});