apigee-127
Version:
Apigee 127 Command Line Interface
68 lines (57 loc) • 1.65 kB
JavaScript
var fs = require('fs');
var _ = require('lodash');
var util = require('util');
module.exports.copyFile = function(source, target, cb) {
cb = _.once(cb);
var rd = fs.createReadStream(source);
rd.on('error', function(err) {
cb(err);
});
var wr = fs.createWriteStream(target);
wr.on('error', function(err) {
cb(err);
});
wr.on('close', function(err) {
cb(err);
});
rd.pipe(wr);
};
// intercepts stdout and stderr
// returns object with methods:
// output() : returns captured string
// release() : must be called when done, returns captured string
module.exports.captureOutput = function captureOutput() {
var old_stdout_write = process.stdout.write;
var old_console_error = console.error;
var captured = '';
var callback = function(string) {
captured += string;
};
process.stdout.write = (function(write) {
return function(string, encoding, fd) {
var args = _.toArray(arguments);
write.apply(process.stdout, args);
// only intercept the string
callback.call(callback, string);
};
}(process.stdout.write));
console.error = (function(log) {
return function() {
var args = _.toArray(arguments);
args.unshift('[ERROR]');
console.log.apply(console.log, args);
// string here encapsulates all the args
callback.call(callback, util.format(args));
};
}(console.error));
return {
output: function output(err, reply) {
return captured;
},
release: function done(err, reply) {
process.stdout.write = old_stdout_write;
console.error = old_console_error;
return captured;
}
}
};