@@ -8,8 +8,6 @@
8{-# LANGUAGE TemplateHaskell #-}
8{-# LANGUAGE TemplateHaskell #-}
9module Obelisk.Backend
9module Obelisk.Backend
10 ( Backend (..)
10 ( Backend (..)
12− , serveDefaultObeliskApp'
13 -- * Re-exports
11 -- * Re-exports
14 , Default (def)
12 , Default (def)
15 , getPageName
13 , getPageName
@@ -57,11 +55,8 @@ data GhcjsApp route = GhcjsApp
58-- | Serve a frontend, which must be the same frontend that Obelisk has built and placed in the default location
56-- | Serve a frontend, which must be the same frontend that Obelisk has built and placed in the default location
59--TODO: The frontend should be provided together with the asset paths so that this isn't so easily breakable; that will probably make this function obsolete
57--TODO: The frontend should be provided together with the asset paths so that this isn't so easily breakable; that will probably make this function obsolete
60−serveDefaultObeliskApp :: MonadSnap m => Frontend (R appRoute) -> R (ObeliskRoute appRoute) -> m ()
61−serveDefaultObeliskApp = serveDefaultObeliskApp' defaultStaticAssets
63−serveDefaultObeliskApp' :: MonadSnap m => StaticAssets -> Frontend (R appRoute) -> R (ObeliskRoute appRoute) -> m ()
58+serveDefaultObeliskApp :: MonadSnap m => ([Text] -> m ()) -> Frontend (R appRoute) -> R (ObeliskRoute appRoute) -> m ()
64−serveDefaultObeliskApp' staticAssets frontend = serveObeliskApp staticAssets frontendApp
59+serveDefaultObeliskApp serveStaticAsset frontend = serveObeliskApp serveStaticAsset frontendApp
65 where frontendApp = GhcjsApp
60 where frontendApp = GhcjsApp
66 { _ghcjsApp_compiled = defaultFrontendGhcjsAssets
61 { _ghcjsApp_compiled = defaultFrontendGhcjsAssets
67 , _ghcjsApp_value = frontend
62 , _ghcjsApp_value = frontend
@@ -112,11 +107,11 @@ getRouteWith e = do
112 pageName <- getPageName
107 pageName <- getPageName
113 return $ tryDecode e pageName
108 return $ tryDecode e pageName
115−serveObeliskApp :: MonadSnap m => StaticAssets -> GhcjsApp (R appRoute) -> R (ObeliskRoute appRoute) -> m ()
110+serveObeliskApp :: MonadSnap m => ([Text] -> m ()) -> GhcjsApp (R appRoute) -> R (ObeliskRoute appRoute) -> m ()
116−serveObeliskApp staticAssets frontendApp = \case
111+serveObeliskApp serveStaticAsset frontendApp = \case
117 ObeliskRoute_App appRouteComponent :=> Identity appRouteRest -> serveGhcjsApp frontendApp $ GhcjsAppRoute_App appRouteComponent :/ appRouteRest
112 ObeliskRoute_App appRouteComponent :=> Identity appRouteRest -> serveGhcjsApp frontendApp $ GhcjsAppRoute_App appRouteComponent :/ appRouteRest
118 ObeliskRoute_Resource resComponent :=> Identity resRest -> case resComponent :=> Identity resRest of
113 ObeliskRoute_Resource resComponent :=> Identity resRest -> case resComponent :=> Identity resRest of
119− ResourceRoute_Static :=> Identity pathSegments -> serveStaticAssets staticAssets pathSegments
114+ ResourceRoute_Static :=> Identity pathSegments -> serveStaticAsset pathSegments
120 ResourceRoute_Ghcjs :=> Identity pathSegments -> serveGhcjsApp frontendApp $ GhcjsAppRoute_Resource :/ pathSegments
115 ResourceRoute_Ghcjs :=> Identity pathSegments -> serveGhcjsApp frontendApp $ GhcjsAppRoute_Resource :/ pathSegments
121 ResourceRoute_JSaddleWarp :=> Identity _ -> do
116 ResourceRoute_JSaddleWarp :=> Identity _ -> do
122 let msg = "Error: Obelisk.Backend received jsaddle request"
117 let msg = "Error: Obelisk.Backend received jsaddle request"
@@ -151,7 +146,7 @@ runBackend backend frontend = case checkEncoder $ _backend_routeEncoder backend
151 getRouteWith validFullEncoder >>= \case
146 getRouteWith validFullEncoder >>= \case
152 Identity r -> case r of
147 Identity r -> case r of
153 InL backendRoute :=> Identity a -> serveRoute $ backendRoute :/ a
148 InL backendRoute :=> Identity a -> serveRoute $ backendRoute :/ a
154− InR obeliskRoute :=> Identity a -> serveDefaultObeliskApp frontend $ obeliskRoute :/ a
149+ InR obeliskRoute :=> Identity a -> serveDefaultObeliskApp (serveStaticAssets defaultStaticAssets) frontend $ obeliskRoute :/ a
156renderGhcjsFrontend :: route -> Frontend route -> IO ByteString
151renderGhcjsFrontend :: route -> Frontend route -> IO ByteString
157renderGhcjsFrontend route f = do
152renderGhcjsFrontend route f = do