summaryrefslogtreecommitdiff
path: root/node_modules/spawn-sync/lib/worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/spawn-sync/lib/worker.js')
-rw-r--r--node_modules/spawn-sync/lib/worker.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/node_modules/spawn-sync/lib/worker.js b/node_modules/spawn-sync/lib/worker.js
new file mode 100644
index 0000000..3e050ac
--- /dev/null
+++ b/node_modules/spawn-sync/lib/worker.js
@@ -0,0 +1,56 @@
+'use strict';
+
+var cp = require('child_process');
+var fs = require('fs');
+var concat = require('concat-stream');
+var JSON = require('./json-buffer');
+
+var inputFile = process.argv[2];
+var outputFile = process.argv[3];
+
+var args = JSON.parse(fs.readFileSync(inputFile, 'utf8'));
+function output(result) {
+ fs.writeFileSync(outputFile, JSON.stringify(result));
+}
+
+var child = cp.spawn.apply(cp, args);
+var options = (args[2] && typeof args[2] === 'object') ?
+ args[2] :
+ (args[1] && typeof args[1] === 'object' && !Array.isArray(args[1])) ?
+ args[1] :
+ {};
+
+var complete = false;
+var stdout, stderr;
+child.stdout && child.stdout.pipe(concat(function (buf) {
+ stdout = buf.length ? buf : new Buffer(0);
+}));
+child.stderr && child.stderr.pipe(concat(function (buf) {
+ stderr = buf.length ? buf : new Buffer(0);
+}));
+child.on('error', function (err) {
+ output({pid: child.pid, error: err.message});
+});
+child.on('close', function (status, signal) {
+ if (options.encoding && options.encoding !== 'buffer') {
+ stdout = stdout.toString(options.encoding);
+ stderr = stderr.toString(options.encoding);
+ }
+ output({
+ pid: child.pid,
+ output: [null, stdout, stderr],
+ stdout: stdout,
+ stderr: stderr,
+ status: status,
+ signal: signal
+ });
+});
+
+if (options.timeout && typeof options.timeout === 'number') {
+ setTimeout(function () {
+ child.kill(options.killSignal || 'SIGTERM');
+ }, options.timeout);
+}
+if (options.input && (typeof options.input === 'string' || Buffer.isBuffer(options.input))) {
+ child.stdin.end(options.input);
+}