specter/out/node_repl.js

75 lines
1.8 KiB
JavaScript
Raw Normal View History

2015-06-24 18:28:33 +00:00
process.env.NODE_DISABLE_COLORS = true;
var net = require("net");
var vm = require("vm");
var dom = require("domain").create();
var PORT = 50415;
try {
require("source-map-support").install();
} catch(err) {
}
net.createServer(function (socket) {
var buffer = "",
ret = null,
err = null;
socket.write("ready");
socket.write("\0");
socket.setEncoding("utf8");
dom.on("error", function(ue) {
console.error(ue.stack);
});
socket.on("data", function(data) {
if(data[data.length-1] != "\0") {
buffer += data;
} else {
if(buffer.length > 0) {
data = buffer + data;
buffer = "";
}
if(data) {
// not sure how \0's are getting through - David
data = data.replace(/\0/g, "");
try {
dom.run(function() {
ret = vm.runInThisContext(data, "repl");
});
} catch (e) {
err = e;
}
}
if(err) {
socket.write(JSON.stringify({
status: "exception",
value: err.stack
}));
} else if(ret !== undefined && ret !== null) {
socket.write(JSON.stringify({
status: "success",
value: ret.toString()
}));
} else {
socket.write(JSON.stringify({
status: "success",
value: null
}));
}
ret = null;
err = null;
socket.write("\0");
}
});
}).listen(PORT);
console.log("ClojureScript Node.js REPL server listening on", PORT);