(* TODO *) (* Dream.origin_referrer_check *) let getAndPost path handler = Dream.scope "/" [] [ Dream.get path handler; Dream.post path Rsc.DreamRSC.stream_function_response; ] let router = Dream.router ([ (* rendering tricks *) Dream.get "/output.css" (Dream.from_filesystem "./_build/default/demo" "output.css"); Dream.get "/static/**" (Dream.static "./_build/default/client/app"); getAndPost Router.demoRenderToString (fun _ -> Dream.html Pages.Hydrate.toString); getAndPost Router.demoRenderToString (fun _ -> Dream.html Pages.Hydrate.toStatic); (* more demos *) getAndPost Router.demoRenderToStream Pages.Comments.handler; getAndPost Router.demoSinglePageRSC Pages.SinglePageRSC.handler; getAndPost Router.demoRouterRSC Pages.RouterRSC.handler; getAndPost Router.demoServerOnlyRSC Pages.ServerOnlyRSC.handler; (* my actual routes *) Dream.get "/root" (fun _ -> Dream.html "Roooot"); Dream.get "/login" (fun _ -> Dream.html "Welcome"); Dream.get "/blog/:poast" (fun req -> Dream.html (Dream.param req "poast")); Dream.get "/react" (fun _ -> Dream.html "Welcome"); Dream.get "/fail" (fun _ -> raise (Failure "Oh noes")); Dream.post "/echo" (fun req -> let%lwt body = Dream.body req in Dream.respond ~headers:[ ("Content-Type", "application/json") ] body); Dream.get "/" Pages.Index.handler; ] @ Api.Json.routes @ Api.Stream.streams) let server = Dream.logger @@ Middleware.Logs.detailed_logger @@ Middleware.Promise.count_requests @@ Middleware.Counter.count_requests router let () = Dream.run ~port:4444 server