Shaking out tick's api and alpha.interval suites (api 353->359, interval
0->103 passing) cleared a set of general gaps:
- Named-zone DST. Zones resolved to a fixed representative offset, so
America/New_York in August read -05:00 not -04:00. Add US/EU DST rules
(compact transition-date math) and make instant<->zoned, the zone rules'
getOffset, and the zoned equality arm DST-aware.
- Nanosecond zoned/offset times. Instant is nanos but atZone/atOffset/
toInstant/withZoneSameInstant and Instant/parse went through epoch-ms,
truncating sub-ms. Route them through nanos.
- Locale month/day names. A formatter dropped its Locale; carry it and add
French names so MMM under Locale/FRENCH renders "mai".
- Callable records. A defrecord implementing clojure.lang.IFn (tick's
GeneralRelation) is now invokable: jolt-invoke dispatches to its inline
invoke method. Also give collections the Iterable host tag so a protocol
extended to Iterable matches vectors/seqs.
- Imported class short names. (:import [java.time ZonedDateTime]) then
(. ZonedDateTime parse s) resolved to nil; an otherwise-unresolved bare
Capitalized name that's a registered host class now resolves as a class.
- Data readers. A project's data_readers.{clj,cljc} is loaded into
*data-readers* (reader namespaces required eagerly); registered #tag
literals in source rewrite to (reader-fn 'form). clojure.core/read-string
now applies #inst/#uuid/#"regex" and *data-readers* like Clojure.
- Duration/between accepts zoned/offset date-times.
All runtime shims, no re-mint. docs/libraries.md: tick full pass + aero.
4.6 KiB
4.6 KiB
Clojure libraries known to work with Jolt
Libraries confirmed to load and pass their conformance checks on Jolt (see the examples, e.g. the ring-app example).
- aero — EDN configuration with tag literals;
read-configresolves#ref/#env/#or/#profile/#long/… and map/vector/set configs round-trip - config
- Selmer
- medley
- cuerdas
- ring-core — via
:deps/root "ring-core", on the ring-app example's spork/http adapter - ring-codec
- reitit-core — data-driven routing; the
reitit.Trie Java class is mirrored in Clojure by
jolt-lang/router. Load with
JOLT_FEATURESincludingclj. - integrant — data-driven system
configuration;
ig/init/ig/halt!build and tear down a component graph wired with#ig/ref, on the ring-app example. Loads unmodified with its dependency and meta-merge deps. - honeysql — full formatter + helpers (select/insert/update/delete/joins/:inline), loaded unmodified from git
- clojure.jdbc — as jolt-lang/db's
jdbc.core, over the built-in SQLite access (libsqlite3 via Chez's FFI) - next.jdbc — a compatibility layer in
jolt-lang/db (
next.jdbc,next.jdbc.sql,next.jdbc.prepare,next.jdbc.transaction) overjdbc.core, for libraries that target the next.jdbc API - tools.logging — the real
clojure.tools.loggingsource runs verbatim. jolt provides a nativeclojure.tools.logging.implbackend (a stderrLoggerFactory— 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, aclojure.pprintsubset,clojure.string/trim-newline). The level macros,logf/logp,spy, andenabled?all work; output goes to stderr. - migratus — database migrations; loads
unmodified and runs filesystem SQL/EDN migrations against SQLite through the
next.jdbc layer above.
migrate/rollbackround-trip end to end. - malli — data schema validation, on the
malli-app example.
m/validateandm/explainwork across the vocabulary (predicates,:int/:string/:keyword,:mapincl. nested + optional,:vector,:tuple,:enum,:maybe,:and/:or,:re, bounded int/string). Load withJOLT_FEATURESincludingclj(malli's.cljckeys class-schemas off the:cljreader-conditional branches). - markdown-clj — Markdown → HTML, on the markdown-app example. Renders headings, emphasis, inline code, links, lists, tables, strikethrough.
- hiccup — HTML from Clojure data, on the
hiccup-app example.
Element tags, attribute maps, nested elements, and
forcomprehensions; itshtmlmacro pre-compiles the markup (a good compiler stress test). - clojure.data.json — JSON reading and
writing;
read-str/write-strwith key/value fns and options. Its own test suite passes 138/139. - clojure.spec.alpha — data specs;
s/def,s/valid?,s/conform,s/cat/s/keys,s/explain-str, ands/check-assertswork over the registry. - tick — date/time over Jolt's
java.time. Itsapiandalpha.intervaltest suites pass in full, including named-zone DST, nanosecond instants, and French locale formatting. Loads withJOLT_FEATURESincludingclj;#time/…literals work viatime-literals' data readers.