Skip to content

Instantly share code, notes, and snippets.

@bhurlow
Created January 2, 2016 21:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bhurlow/2461e079be9a35319fd6 to your computer and use it in GitHub Desktop.
Save bhurlow/2461e079be9a35319fd6 to your computer and use it in GitHub Desktop.
var bencode = require('bencode')
var net = require('net')
var conn = net.connect(57720)
// var msg = {op: "eval", code: '(println 1000000)'}
// var msg = {op: "eval", code: '(println process.env.HOME)'}
// var msg = {op: "eval", code: '(cemerick.piggieback/cljs-repl (cljs.repl.node/repl-env))'}
// var msg = {op: "eval", code: "(+ 1 2 3)"}
var cljForm = '(System/getenv "HOME")'
var nodeForm = '(js/console.log process.env.HOME)'
var piggie = '(cemerick.piggieback/cljs-repl (cljs.repl.node/repl-env))'
var piggieRhino = '(cemerick.piggieback/cljs-repl (cljs.repl.rhino/repl-env))'
var fixed_session = null
function sendForm(form) {
var msg = {op: "eval", code: form, session: fixed_session}
var payload = bencode.encode(msg)
conn.write(payload, 'binary')
}
function sendCljsForm (form) {
var msg = {op: "eval", code: form, session: fixed_session, ns: 'cljs.user'}
var payload = bencode.encode(msg)
conn.write(payload, 'binary')
}
function createSession() {
var msg = {op: "clone"}
var payload = bencode.encode(msg)
conn.write(payload, 'binary')
}
createSession()
var sentval = false
conn.on('data', function(chunk) {
var dec = bencode.decode(chunk, 'utf8')
console.log(dec)
if (dec.ns === 'cljs.user' && !sentval) {
sentval = true
sendCljsForm(nodeForm)
}
if (dec['new-session'] && !fixed_session) {
console.log('SETTING NEW SESSION')
fixed_session = dec['new-session']
sendForm("(require 'cljs.repl.node)")
sendForm(piggie)
}
})
conn.on('error', function(err) {
console.log(err)
})
conn.on('end', function() {
console.log('ended')
})
@bhurlow
Copy link
Author

bhurlow commented Jan 2, 2016

proof of concept for talking to cljs nrepl using piggieback

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment