The only effectful layer: run a plan through an injected elisp evaluator.
Every request is issued asynchronously and awaited under a deadline. A Slynk request naming a callee the image cannot resolve is never answered, and a synchronous wait on it blocks the whole editor; the deadline is what bounds that to one failed verb.
The evaluator is injected, so tests drive this namespace with a recording stub and never a live host.
The only effectful layer: run a plan through an injected elisp evaluator. Every request is issued asynchronously and awaited under a deadline. A Slynk request naming a callee the image cannot resolve is never answered, and a synchronous wait on it blocks the whole editor; the deadline is what bounds that to one failed verb. The evaluator is injected, so tests drive this namespace with a recording stub and never a live host.
Backend profiles and their registry — the DIP swap point.
A profile is plain data describing what one transport does with each verb.
Adding a third transport is register! of one more profile; nothing above
this namespace changes.
The :slynk profile's RPC names and argument lists were measured against a running image, and the package qualifications are load bearing.
Backend profiles and their registry — the DIP swap point. A profile is plain data describing what one transport does with each verb. Adding a third transport is `register!` of one more profile; nothing above this namespace changes. The :slynk profile's RPC names and argument lists were measured against a running image, and the package qualifications are load bearing.
Malli value objects for the REPL-backend translation layer.
One vocabulary spans both transports: a caller names a VERB and a BACKEND, and a backend PROFILE says which RPC that verb becomes. Everything here is data — no protocol, no function, appears in a schema.
Malli value objects for the REPL-backend translation layer. One vocabulary spans both transports: a caller names a VERB and a BACKEND, and a backend PROFILE says which RPC that verb becomes. Everything here is data — no protocol, no function, appears in a schema.
Pure translation: a verb-and-backend request becomes an executable plan.
Nothing here performs an effect or names a transport. Every backend difference is read out of the profile, so a new backend needs no change in this namespace.
Pure translation: a verb-and-backend request becomes an executable plan. Nothing here performs an effect or names a transport. Every backend difference is read out of the profile, so a new backend needs no change in this namespace.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |