{;; Exact pins — the Closure compiler version rides on these two (the same
;; known-good pair as the kits and game1); half of the deterministic-build
;; story (dev/docs/CLJS.md).
;;
;; Relative paths only — never :local/root, never an absolute path: the idpat
;; publish gate scans every decompressed git object for local path fragments.
;;
;; ardegazu-rooms-kit carries the shared rooms core — ardegazu.rooms.js and
;; ardegazu.rooms.lib.{access,crypto,descriptor,encryption,log,net,
;; orbit-identity,protocol,turn}. This app does NOT vendor it: it compiles the
;; kit's own sources off the classpath, which is what the second :paths entry
;; below is for. The sha pin in package.json stays the ONE cross-repo
;; dependency mechanism (dev/docs/CLJS.md) — one bump path, one lockfile,
;; `ardz kit-release` unchanged; this entry only points at what the pin already
;; installed. Require those namespaces under their real ardegazu.rooms.* names:
;; there is no rename and no copy, so a fix in the kit reaches you on the next
;; sha bump and there is nothing to keep in sync.
;;
;; What stays app-local is what the kit has no counterpart for: lib/mailbox
;; (offline delivery), lib/selftest and stores.cljs (the browser IndexedDB store
;; opener — lib/log's open-helia deliberately names no store package, so each
;; host supplies its own). Your own LogOp union goes in lib/protocol.cljs.
;;
;; ardegazu-id-kit is deliberately NOT on this classpath: the rooms-kit sources
;; import it as the npm package ("ardegazu-id-kit"), which resolves to its
;; compiled dist, and that import cannot be redirected to a classpath copy.
;; Adding id-kit's src here too would put TWO Identity classes in one process —
;; instanceof would not hold across them. rooms-kit pins the same id-kit sha
;; this app does, so npm hoists exactly one copy.
;; promesa is the ONE async idiom, and the vendored lib/mailbox.cljs requires
;; it — so it is not optional for a rooms app, it is what makes the :app build
;; compile at all. Exact pin for the same reason as the two above: two cold
;; builds must be byte-identical or the IPFS/IPNS release flow loses its
;; determinism. Its only dependency is org.clojure/clojure, so it drags nothing
;; else onto this classpath. Know before you touch it: promesa's ClojureScript
;; runtime is NOT js/Promise — it ships its own PromiseImpl, which is thenable
;; and assimilated by native code but is not `instanceof Promise`, and an
;; unhandled rejection on one does not fire window.onunhandledrejection. End
;; every promesa chain in a catch of its own.
:paths ["src" "node_modules/ardegazu-rooms-kit/src"]
:deps {org.clojure/clojurescript {:mvn/version "1.12.134"}
thheller/shadow-cljs {:mvn/version "3.3.6"}
funcool/promesa {:mvn/version "12.0.1"}}
:aliases
{:dev {:extra-deps {cider/cider-nrepl {:mvn/version "0.59.0"}}}
;; cljfmt is a TOOL, not a dependency. :replace-deps keeps it off the build
;; classpath (neither shadow-cljs nor clojurescript is loaded to run it) and
;; :replace-paths keeps the sources off it too — cljfmt only ever reads the
;; files named on the command line. Exact pin, same rule as the two above.
;; The config is committed beside this file; both paths are relative, because
;; the idpat publish gate aborts on a local filesystem path in any object.
;; Wired into `npm test` as the FIRST link of the test script itself, not as
;; a `pretest` hook: an npm lifecycle hook is skipped outright under
;; `ignore-scripts=true`, which is a gate that passes by not running.
:cljfmt {:replace-deps {dev.weavejester/cljfmt {:mvn/version "0.13.1"}}
:replace-paths []
:main-opts ["-m" "cljfmt.main" "--config" ".cljfmt.edn"]}}}