Skip to content

Commit 731fb54

Browse files
committed
Allow to "hide" routes from the client
1 parent 7b68cf2 commit 731fb54

File tree

5 files changed

+31
-3
lines changed

5 files changed

+31
-3
lines changed

solga-client-ghcjs/src/Solga/Client/GHCJS.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
{-# LANGUAGE DeriveTraversable #-}
2525
{-# LANGUAGE NamedFieldPuns #-}
2626
{-# LANGUAGE CPP #-}
27+
{-# LANGUAGE EmptyCase #-}
2728
module Solga.Client.GHCJS
2829
( Client(..)
2930
, SomeRequestData(..)
@@ -36,6 +37,7 @@ module Solga.Client.GHCJS
3637
, Response(..)
3738
, Header
3839
, XHRError(..)
40+
, HiddenRequestData
3941
) where
4042

4143
import Data.Kind
@@ -126,6 +128,12 @@ instance (Client next) => Client (End next) where
126128
type RequestData (End next) = RequestData next
127129
performRequest _p req perf = performRequest (Proxy @next) req perf
128130

131+
data HiddenRequestData a
132+
133+
instance Client (Hidden next) where
134+
type RequestData (Hidden next) = HiddenRequestData
135+
performRequest _p _req perf = case perf of {}
136+
129137
addSegment :: Request -> Text -> Request
130138
addSegment req seg = req{reqSegments = reqSegments req <> DList.singleton seg}
131139

solga-client/src/Solga/Client.hs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
{-# LANGUAGE DefaultSignatures #-}
1818
{-# LANGUAGE FlexibleContexts #-}
1919
{-# LANGUAGE UndecidableInstances #-}
20+
{-# LANGUAGE EmptyCase #-}
2021
module Solga.Client
2122
( Client(..)
2223
, SomeRequestData(..)
@@ -25,6 +26,7 @@ module Solga.Client
2526
, ToSegment(..)
2627
, WithData(..)
2728
, GetResponse(..)
29+
, HiddenRequestData
2830
) where
2931

3032
import Data.Kind
@@ -78,6 +80,12 @@ instance (Client next) => Client (End next) where
7880
type RequestData (End next) = RequestData next
7981
performRequest _p mgr req perf = performRequest (Proxy @next) mgr req perf
8082

83+
data HiddenRequestData a
84+
85+
instance Client (Hidden next) where
86+
type RequestData (Hidden next) = HiddenRequestData
87+
performRequest _p _mgr _req perf = case perf of {}
88+
8189
addSegment :: Http.Request -> Text -> Http.Request
8290
addSegment req segtxt = req
8391
{ Http.path = if BS.null (Http.path req) || BSC8.last (Http.path req) == '/'

solga-core/src/Solga/Core.hs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ module Solga.Core
4242
, (:<|>)(..)
4343
, RedirectOnTrailingSlash(..)
4444
, WithReferer(..)
45+
, Hidden(..)
4546
-- * FromSegment
4647
, FromSegment(..)
4748
) where
@@ -165,4 +166,8 @@ instance FromSegment JSString where
165166

166167
newtype RedirectOnTrailingSlash next = RedirectOnTrailingSlash {unRedirectOnTrailingSlash :: next}
167168

168-
newtype WithReferer next = WithReferer { withRefererNext :: Maybe ByteString -> next }
169+
newtype WithReferer next = WithReferer { withRefererNext :: Maybe ByteString -> next }
170+
171+
-- | To hide from client libraries
172+
newtype Hidden next = Hidden {hiddenNext :: next}
173+

solga-router/src/Solga/Router.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ instance Router next => Router (End next) where
108108
[] -> tryRouteNext endNext req
109109
_ -> Nothing
110110

111+
instance Router next => Router (Hidden next) where
112+
tryRoute req = case Wai.pathInfo req of
113+
[] -> tryRouteNext hiddenNext req
114+
_ -> Nothing
115+
111116
instance (KnownSymbol seg, Router next) => Router (Seg seg next) where
112117
tryRoute req = case Wai.pathInfo req of
113118
s : segs | Text.unpack s == symbolVal (Proxy :: Proxy seg) ->
@@ -221,6 +226,10 @@ instance Abbreviated next => Abbreviated (End next) where
221226
type Brief (End next) = Brief next
222227
brief = End . brief
223228

229+
instance Abbreviated next => Abbreviated (Hidden next) where
230+
type Brief (Hidden next) = Brief next
231+
brief = Hidden . brief
232+
224233
instance Abbreviated next => Abbreviated (Seg seg next) where
225234
type Brief (Seg seg next) = Brief next
226235
brief = Seg . brief

stack.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ packages:
1111
- 'solga-router'
1212
- 'solga-client'
1313
- 'solga-client-ghcjs'
14-
- 'solga-typescript'
1514

1615
# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)
1716
extra-deps:
@@ -20,7 +19,6 @@ extra-deps:
2019
- jsaddle-dom-0.9.4.0
2120
- jsaddle-0.9.7.0
2221
- ref-tf-0.4.0.2
23-
- aeson-typescript-0.2.0.0
2422

2523
# Override default flag values for local packages and extra-deps
2624
flags: {}

0 commit comments

Comments
 (0)