Pivot from a jolt reimplementation to running the upstream library verbatim.
Vendors the real clojure/tools/logging.clj; jolt provides the backend and the
host primitives it needs. Language features (broadly useful for real Clojure
libs), all covered in 3-mode conformance + spec suites:
- defmacro: multi-arity dispatch (jolt-q8l) and a docstring + attr-map + params
head (jolt-qnr) — the 4-arity log macro and every level macro need these.
- syntax-quote resolves an alias-qualified symbol to its target ns (jolt-9av),
so a macro template (impl/get-logger) resolves at the use site.
- the ns macro unwraps ^{:map} metadata on the ns name (jolt-8w2 workaround,
matching def/defn/defmacro).
- a namespace object self-evaluates, so ~*ns* can be spliced into a template.
Host shims (ported from / modeled on clojure where applicable):
- clojure.string/trim-newline (ported, CharSequence interop -> count/subs)
- agent/send-off/send (minimal synchronous stubs; jolt has no thread pool/STM)
- clojure.lang.LockingTransaction/isRunning -> false
- a minimal clojure.pprint (pprint/with-pprint-dispatch/code-dispatch, for spy)
- clojure.tools.logging.impl: a jolt stderr LoggerFactory backend (the library's
designed pluggable extension point)
docs/libraries.md lists tools.logging; grammar.ebnf metadata note clarified.
Conformance 355/355 x3 modes; full jpm test gate green.
39 lines
2.5 KiB
Markdown
39 lines
2.5 KiB
Markdown
# Clojure libraries known to work with Jolt
|
|
|
|
Libraries confirmed to load and pass their conformance checks on Jolt
|
|
(see `test/integration/deps-conformance-test.janet` and the
|
|
[ring-app example](https://github.com/jolt-lang/examples/tree/main/ring-app)).
|
|
|
|
* [config](https://github.com/yogthos/config)
|
|
* [Selmer](https://github.com/yogthos/Selmer)
|
|
* [medley](https://github.com/weavejester/medley)
|
|
* [cuerdas](https://github.com/funcool/cuerdas)
|
|
* [ring-core](https://github.com/ring-clojure/ring) — via `:deps/root "ring-core"`,
|
|
on the [ring-app example](https://github.com/jolt-lang/examples/tree/main/ring-app)'s
|
|
spork/http adapter
|
|
* [ring-codec](https://github.com/ring-clojure/ring-codec)
|
|
* [reitit-core](https://github.com/metosin/reitit) — data-driven routing; the
|
|
reitit.Trie Java class is mirrored in Clojure by
|
|
[jolt-lang/router](https://github.com/jolt-lang/router). Load with
|
|
`JOLT_FEATURES` including `clj`.
|
|
* [honeysql](https://github.com/seancorfield/honeysql) — full formatter + helpers
|
|
(select/insert/update/delete/joins/:inline), loaded unmodified from git
|
|
* [clojure.jdbc](https://github.com/yogthos/clojure.jdbc) — as [jolt-lang/db](https://github.com/jolt-lang/db)'s
|
|
`jdbc.core`, reimplemented over janet sqlite3/pq drivers (SQLite + PostgreSQL)
|
|
* [next.jdbc](https://github.com/seancorfield/next-jdbc) — a compatibility layer in
|
|
[jolt-lang/db](https://github.com/jolt-lang/db) (`next.jdbc`, `next.jdbc.sql`,
|
|
`next.jdbc.prepare`, `next.jdbc.transaction`) over `jdbc.core`, for libraries
|
|
that target the next.jdbc API
|
|
* [tools.logging](https://github.com/clojure/tools.logging) — the real
|
|
`clojure.tools.logging` source runs verbatim. jolt provides a native
|
|
`clojure.tools.logging.impl` backend (a stderr `LoggerFactory` — the library's
|
|
designed extension point, where slf4j/log4j/jul adapters normally plug in) plus
|
|
the host shims it needs (`agent`/`send-off`, `clojure.lang.LockingTransaction`,
|
|
a `clojure.pprint` subset, `clojure.string/trim-newline`). The level macros,
|
|
`logf`/`logp`, `spy`, and `enabled?` all work; output goes to stderr.
|
|
* [migratus](https://github.com/yogthos/migratus) — database migrations; loads
|
|
unmodified and runs filesystem SQL/EDN migrations against SQLite through the
|
|
next.jdbc layer above. `migrate`/`rollback` round-trip end to end. Caveat:
|
|
migration ids are 14-digit timestamps, and the janet-lang/sqlite3 driver
|
|
currently truncates INTEGER columns to 32 bits, so completion tracking needs
|
|
the one-line upstream fix (`sqlite3_column_int64`); ids under 2^31 work as is.
|