-
Notifications
You must be signed in to change notification settings - Fork 0
/
repl.clj
39 lines (33 loc) · 1.23 KB
/
repl.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(ns wing.repl
"REPL namespace for Wing"
(:require [clojure.tools.deps.alpha :as tools.deps]
[cemerick.pomegranate :as pome]))
(defn- deps->class-paths!
"Convert a map of deps into a sequence of class paths.
See `clojure.tools.deps.alpha/resolve-deps` for `arg-maps` documentation."
([deps] (deps->class-paths! deps {}))
([deps arg-map]
(->> (tools.deps/resolve-deps
{:deps deps
:mvn/repos
{"central" {:url "https://repo1.maven.org/maven2/"}
"clojars" {:url "https://repo.clojars.org/"}}}
arg-map)
(vals)
(mapcat :paths))))
(defn sync-libs!
"Dynamically refreshes all libs in `deps.edn` and installs any missing.
Optionally takes an alias to look under."
([] (sync-libs! nil))
([?alias]
(let [edn (-> "deps.edn" slurp read-string)
deps (get edn :deps)
extra-deps (when ?alias
(get-in edn [:aliases ?alias :extra-deps]))]
(->> (deps->class-paths! deps {:extra-deps extra-deps})
(run! pome/add-classpath)))))
(defn add-lib!
"Add a single library to the active classpath."
[lib-sym lib-spec]
(->> (deps->class-paths! {lib-sym lib-spec})
(run! pome/add-classpath)))