51 lines
872 B
JavaScript
51 lines
872 B
JavaScript
|
const spawn = require('child_process').spawn;
|
||
|
const path = require('path');
|
||
|
|
||
|
const executable = path.join(__dirname, 'detached.js');
|
||
|
|
||
|
module.exports = ({
|
||
|
source,
|
||
|
entrypoint,
|
||
|
configFullpath
|
||
|
}, fn) => {
|
||
|
let out = '';
|
||
|
let err = '';
|
||
|
|
||
|
const child = spawn('node', [
|
||
|
executable,
|
||
|
`--entrypoint=${entrypoint}`,
|
||
|
`--config=${configFullpath}`
|
||
|
]);
|
||
|
|
||
|
child.stdin.write(source);
|
||
|
child.stdin.end();
|
||
|
|
||
|
child.stdout.on('data', (data) => {
|
||
|
out += data;
|
||
|
});
|
||
|
|
||
|
child.stderr.on('data', (data) => {
|
||
|
err += data;
|
||
|
});
|
||
|
|
||
|
child.on('close', (code) => {
|
||
|
if (code !== 0) {
|
||
|
return fn(new Error(err));
|
||
|
}
|
||
|
|
||
|
const res = {
|
||
|
style: '',
|
||
|
body: ''
|
||
|
};
|
||
|
|
||
|
try {
|
||
|
const _res = JSON.parse(out);
|
||
|
res.style = _res.style;
|
||
|
res.body = _res.body;
|
||
|
} catch(err) {
|
||
|
console.error(err);
|
||
|
}
|
||
|
|
||
|
fn(null, res);
|
||
|
});
|
||
|
};
|