mirror of
https://github.com/metosin/reitit.git
synced 2025-12-21 18:11:12 +00:00
Single pass router creation
This commit is contained in:
parent
0a58510dc2
commit
91bc72e8cd
1 changed files with 23 additions and 27 deletions
|
|
@ -97,16 +97,15 @@
|
||||||
(linear-router routes {}))
|
(linear-router routes {}))
|
||||||
([routes opts]
|
([routes opts]
|
||||||
(let [{:keys [compile]} (meta-merge default-router-options opts)
|
(let [{:keys [compile]} (meta-merge default-router-options opts)
|
||||||
compiled (map (partial compile-route compile) routes)]
|
compiled (map (partial compile-route compile) routes)
|
||||||
(->LinearRouter
|
[data lookup] (reduce
|
||||||
routes
|
(fn [[data lookup] [p {:keys [name] :as meta} handler]]
|
||||||
(mapv (partial impl/create) compiled)
|
(let [route (impl/create [p meta handler])]
|
||||||
(->> (for [[p {:keys [name] :as meta} handler] compiled
|
[(conj data route)
|
||||||
:when name
|
(if name
|
||||||
:let [route (impl/create [p meta handler])]]
|
(assoc lookup name #(->Match p meta (impl/path-for route %) handler %))
|
||||||
[name (fn [params]
|
lookup)])) [[] {}] compiled)]
|
||||||
(->Match p meta (impl/path-for route params) handler params))])
|
(->LinearRouter routes data lookup))))
|
||||||
(into {}))))))
|
|
||||||
|
|
||||||
(defrecord LookupRouter [routes data lookup]
|
(defrecord LookupRouter [routes data lookup]
|
||||||
Routing
|
Routing
|
||||||
|
|
@ -125,24 +124,21 @@
|
||||||
([routes]
|
([routes]
|
||||||
(lookup-router routes {}))
|
(lookup-router routes {}))
|
||||||
([routes opts]
|
([routes opts]
|
||||||
|
(when-let [route (some impl/contains-wilds? (map first routes))]
|
||||||
|
(throw
|
||||||
|
(ex-info
|
||||||
|
(str "can't create LookupRouter with wildcard routes: " route)
|
||||||
|
{:route route
|
||||||
|
:routes routes})))
|
||||||
(let [{:keys [compile]} (meta-merge default-router-options opts)
|
(let [{:keys [compile]} (meta-merge default-router-options opts)
|
||||||
compiled (map (partial compile-route compile) routes)]
|
compiled (map (partial compile-route compile) routes)
|
||||||
(when-let [route (some impl/contains-wilds? (map first routes))]
|
[data lookup] (reduce
|
||||||
(throw
|
(fn [[data lookup] [p {:keys [name] :as meta} handler]]
|
||||||
(ex-info
|
[(assoc data p (->Match p meta p handler {}))
|
||||||
(str "can't create LookupRouter with wildcard routes: " route)
|
(if name
|
||||||
{:route route
|
(assoc lookup name #(->Match p meta p handler %))
|
||||||
:routes routes})))
|
lookup)]) [{} {}] compiled)]
|
||||||
(->LookupRouter
|
(->LookupRouter routes data lookup))))
|
||||||
routes
|
|
||||||
(->> (for [[p meta handler] compiled]
|
|
||||||
[p (->Match p meta p handler {})])
|
|
||||||
(into {}))
|
|
||||||
(->> (for [[p {:keys [name] :as meta} handler] compiled
|
|
||||||
:when name]
|
|
||||||
[name (fn [params]
|
|
||||||
(->Match p meta p handler params))])
|
|
||||||
(into {}))))))
|
|
||||||
|
|
||||||
(defn router
|
(defn router
|
||||||
"Create a [[Router]] from raw route data and optionally an options map.
|
"Create a [[Router]] from raw route data and optionally an options map.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue