Compile routes already in reitit.core/router

This commit is contained in:
Tommi Reiman 2017-12-26 17:56:46 +02:00
parent 7e37ab9ad0
commit ee0c733726

View file

@ -142,8 +142,7 @@
([routes] ([routes]
(linear-router routes {})) (linear-router routes {}))
([routes opts] ([routes opts]
(let [compiled (compile-routes routes opts) (let [names (find-names routes opts)
names (find-names routes opts)
[pl nl] (reduce [pl nl] (reduce
(fn [[pl nl] [p {:keys [name] :as data} result]] (fn [[pl nl] [p {:keys [name] :as data} result]]
(let [{:keys [params] :as route} (impl/create [p data result]) (let [{:keys [params] :as route} (impl/create [p data result])
@ -152,7 +151,7 @@
(->PartialMatch p data result % params))] (->PartialMatch p data result % params))]
[(conj pl route) [(conj pl route)
(if name (assoc nl name f) nl)])) (if name (assoc nl name f) nl)]))
[[] {}] compiled) [[] {}] routes)
lookup (impl/fast-map nl)] lookup (impl/fast-map nl)]
^{:type ::router} ^{:type ::router}
(reify (reify
@ -160,7 +159,7 @@
(router-name [_] (router-name [_]
:linear-router) :linear-router)
(routes [_] (routes [_]
compiled) routes)
(options [_] (options [_]
opts) opts)
(route-names [_] (route-names [_]
@ -190,14 +189,13 @@
(str "can't create :lookup-router with wildcard routes: " wilds) (str "can't create :lookup-router with wildcard routes: " wilds)
{:wilds wilds {:wilds wilds
:routes routes}))) :routes routes})))
(let [compiled (compile-routes routes opts) (let [names (find-names routes opts)
names (find-names routes opts)
[pl nl] (reduce [pl nl] (reduce
(fn [[pl nl] [p {:keys [name] :as data} result]] (fn [[pl nl] [p {:keys [name] :as data} result]]
[(assoc pl p (->Match p data result {} p)) [(assoc pl p (->Match p data result {} p))
(if name (if name
(assoc nl name #(->Match p data result % p)) (assoc nl name #(->Match p data result % p))
nl)]) [{} {}] compiled) nl)]) [{} {}] routes)
data (impl/fast-map pl) data (impl/fast-map pl)
lookup (impl/fast-map nl)] lookup (impl/fast-map nl)]
^{:type ::router} ^{:type ::router}
@ -205,7 +203,7 @@
(router-name [_] (router-name [_]
:lookup-router) :lookup-router)
(routes [_] (routes [_]
compiled) routes)
(options [_] (options [_]
opts) opts)
(route-names [_] (route-names [_]
@ -225,8 +223,7 @@
([routes] ([routes]
(segment-router routes {})) (segment-router routes {}))
([routes opts] ([routes opts]
(let [compiled (compile-routes routes opts) (let [names (find-names routes opts)
names (find-names routes opts)
[pl nl] (reduce [pl nl] (reduce
(fn [[pl nl] [p {:keys [name] :as data} result]] (fn [[pl nl] [p {:keys [name] :as data} result]]
(let [{:keys [params] :as route} (impl/create [p data result]) (let [{:keys [params] :as route} (impl/create [p data result])
@ -235,7 +232,7 @@
(->PartialMatch p data result % params))] (->PartialMatch p data result % params))]
[(segment/insert pl p (->Match p data result nil nil)) [(segment/insert pl p (->Match p data result nil nil))
(if name (assoc nl name f) nl)])) (if name (assoc nl name f) nl)]))
[nil {}] compiled) [nil {}] routes)
lookup (impl/fast-map nl)] lookup (impl/fast-map nl)]
^{:type ::router} ^{:type ::router}
(reify (reify
@ -243,7 +240,7 @@
(router-name [_] (router-name [_]
:segment-router) :segment-router)
(routes [_] (routes [_]
compiled) routes)
(options [_] (options [_]
opts) opts)
(route-names [_] (route-names [_]
@ -272,7 +269,7 @@
(str ":single-static-path-router requires exactly 1 static route: " routes) (str ":single-static-path-router requires exactly 1 static route: " routes)
{:routes routes}))) {:routes routes})))
(let [[n :as names] (find-names routes opts) (let [[n :as names] (find-names routes opts)
[[p data result] :as compiled] (compile-routes routes opts) [[p data result] :as compiled] routes
p #?(:clj (.intern ^String p) :cljs p) p #?(:clj (.intern ^String p) :cljs p)
match (->Match p data result {} p)] match (->Match p data result {} p)]
^{:type ::router} ^{:type ::router}
@ -280,7 +277,7 @@
(router-name [_] (router-name [_]
:single-static-path-router) :single-static-path-router)
(routes [_] (routes [_]
compiled) routes)
(options [_] (options [_]
opts) opts)
(route-names [_] (route-names [_]
@ -304,7 +301,6 @@
(mixed-router routes {})) (mixed-router routes {}))
([routes opts] ([routes opts]
(let [{wild true, lookup false} (group-by impl/wild-route? routes) (let [{wild true, lookup false} (group-by impl/wild-route? routes)
compiled (compile-routes routes opts)
->static-router (if (= 1 (count lookup)) single-static-path-router lookup-router) ->static-router (if (= 1 (count lookup)) single-static-path-router lookup-router)
wildcard-router (segment-router wild opts) wildcard-router (segment-router wild opts)
static-router (->static-router lookup opts) static-router (->static-router lookup opts)
@ -314,7 +310,7 @@
(router-name [_] (router-name [_]
:mixed-router) :mixed-router)
(routes [_] (routes [_]
compiled) routes)
(options [_] (options [_]
opts) opts)
(route-names [_] (route-names [_]
@ -350,6 +346,7 @@
(let [{:keys [router] :as opts} (meta-merge default-router-options opts) (let [{:keys [router] :as opts} (meta-merge default-router-options opts)
routes (resolve-routes raw-routes opts) routes (resolve-routes raw-routes opts)
conflicting (conflicting-routes routes) conflicting (conflicting-routes routes)
routes (compile-routes routes opts)
wilds? (boolean (some impl/wild-route? routes)) wilds? (boolean (some impl/wild-route? routes))
all-wilds? (every? impl/wild-route? routes) all-wilds? (every? impl/wild-route? routes)
router (cond router (cond