on dac560c help sign in
.gitignore−2
since splitsnapshots
unifiedsplit
@@ -7,5 +7,3 @@ log
7*.stats
7*.stats
8out
8out
9/.stack-work/
9/.stack-work/
10−TAGS
11−dist-newstyle
.travis.yml−1
@@ -12,6 +12,5 @@ before_script:
12
12
13script:
13script:
14 - nix-build travis.nix -A build
14 - nix-build travis.nix -A build
15− - nix-build travis.nix -A buildGhc
16 - nix-build travis.nix -A testserver
15 - nix-build travis.nix -A testserver
17 - nix-build travis.nix -A testresults
16 - nix-build travis.nix -A testresults
README.md+1−1
@@ -7,7 +7,7 @@
7Keeping your frontend in sync with your API server can be difficult - when the
7Keeping your frontend in sync with your API server can be difficult - when the
8API changes its input parameters or return type, XHR requests from the
8API changes its input parameters or return type, XHR requests from the
9frontend will fail at runtime. If your API is defined by
9frontend will fail at runtime. If your API is defined by
10−[servant](https://haskell-servant.readthedocs.io) combinators, you can use
10+[servant](haskell-servant.readthedocs.io) combinators, you can use
11`servant-reflex` to share the API between the server and frontend.
11`servant-reflex` to share the API between the server and frontend.
12Syncronization between is checked at compile time, and rather than building XHR
12Syncronization between is checked at compile time, and rather than building XHR
13requests by hand, API endpoints are available behind `reflex`'s FRP semantics.
13requests by hand, API endpoints are available behind `reflex`'s FRP semantics.
default.nix+17−9
@@ -1,20 +1,28 @@
1−{ mkDerivation, base, bytestring, case-insensitive, containers
1+{ mkDerivation, aeson, base, bytestring, case-insensitive
2−, data-default, exceptions, ghcjs-dom, http-api-data, http-media
2+, containers, data-default, exceptions, ghcjs-dom, http-api-data
3−, jsaddle, mtl, network-uri, reflex, reflex-dom, reflex-dom-core
3+, http-media, jsaddle, mtl, network-uri, reflex, reflex-dom-core
4−, safe, servant, servant-auth, stdenv, string-conversions, text
4+, safe, scientific, servant, servant-auth, stdenv
5−, transformers
5+, string-conversions, text, transformers
6}:
6}:
7mkDerivation {
7mkDerivation {
8 pname = "servant-reflex";
8 pname = "servant-reflex";
9− version = "0.3.6";
9+ version = "0.3.5";
10+ src = builtins.filterSource
11+ (path: type:
12+ baseNameOf path != "result"
13+ && baseNameOf path != "nix"
10− src = ./.;
14+ ) ./.;
15+ configureFlags = [ "-fexample" ];
11 isLibrary = true;
16 isLibrary = true;
12 isExecutable = true;
17 isExecutable = true;
13 libraryHaskellDepends = [
18 libraryHaskellDepends = [
14 base bytestring case-insensitive containers data-default exceptions
19 base bytestring case-insensitive containers data-default exceptions
15 ghcjs-dom http-api-data http-media jsaddle mtl network-uri reflex
20 ghcjs-dom http-api-data http-media jsaddle mtl network-uri reflex
16− reflex-dom reflex-dom-core safe servant servant-auth string-conversions
21+ reflex-dom-core safe servant servant-auth string-conversions text
17− text transformers
22+ transformers
23+ ];
24+ executableHaskellDepends = [
25+ aeson base reflex reflex-dom-core scientific servant text
18 ];
26 ];
19 description = "servant API generator for reflex apps";
27 description = "servant API generator for reflex apps";
20 license = stdenv.lib.licenses.bsd3;
28 license = stdenv.lib.licenses.bsd3;
exec/Example.hs+1−2
@@ -21,8 +21,7 @@ import Servant.API
21import API
21import API
22import Data.Proxy
22import Data.Proxy
23import Text.Read (readMaybe)
23import Text.Read (readMaybe)
24−import Reflex.Dom.Core hiding (run, mainWidget)
24+import Reflex.Dom.Core hiding (run)
25−import Reflex.Dom (mainWidget)
26------------------------------------------------------------------------------
25------------------------------------------------------------------------------
27import Servant.Reflex
26import Servant.Reflex
28import Servant.Reflex.Multi
27import Servant.Reflex.Multi
nix/reflex-platform.nix+2−2
@@ -1,7 +1,7 @@
1let
1let
2− rev = "1aba6f367982bd6dd78ec2fda75ab246a62d32c5" ;
2+ rev = "df0bdcca5eb2a3236ec0496e4430d91876b29cf5";
3in import (builtins.fetchTarball
3in import (builtins.fetchTarball
4 {
4 {
5 url = "https://github.com/reflex-frp/reflex-platform/archive/${rev}.tar.gz";
5 url = "https://github.com/reflex-frp/reflex-platform/archive/${rev}.tar.gz";
6− sha256 = "137vg6i8yy4lp6rz4wbvvhfcc9d9qf7j1b3fnng3r7sj63k7j664" ;
6+ sha256 = "1ja3vkq9px8f9iyiazq44mamaahgiphi9l236pvzbl5jvhi5c4qr";
7 }) {}
7 }) {}
servant-reflex.cabal+2−3
@@ -1,5 +1,5 @@
1Name: servant-reflex
1Name: servant-reflex
2−Version: 0.3.6
2+Version: 0.3.5
3Synopsis: servant API generator for reflex apps
3Synopsis: servant API generator for reflex apps
4Description: Generate reflex-compatible client functions from servant API descriptions
4Description: Generate reflex-compatible client functions from servant API descriptions
5License: BSD3
5License: BSD3
@@ -36,7 +36,7 @@ library
36 jsaddle >= 0.8 && < 0.10,
36 jsaddle >= 0.8 && < 0.10,
37 mtl >= 2.2.1 && < 2.3,
37 mtl >= 2.2.1 && < 2.3,
38 network-uri >= 2.6 && < 2.7,
38 network-uri >= 2.6 && < 2.7,
39− reflex >= 0.5 && < 0.9,
39+ reflex >= 0.5 && < 0.8,
40 reflex-dom-core >= 0.6 && < 0.7,
40 reflex-dom-core >= 0.6 && < 0.7,
41 safe >= 0.3.9 && < 0.4,
41 safe >= 0.3.9 && < 0.4,
42 servant >= 0.16 && < 0.18,
42 servant >= 0.16 && < 0.18,
@@ -61,7 +61,6 @@ executable example
61 base,
61 base,
62 scientific,
62 scientific,
63 servant,
63 servant,
64− reflex-dom,
65 reflex-dom-core,
64 reflex-dom-core,
66 text
65 text
67 default-language: Haskell2010
66 default-language: Haskell2010
src/Servant/Reflex.hs+16−31
@@ -39,36 +39,34 @@ module Servant.Reflex
39
39
40------------------------------------------------------------------------------
40------------------------------------------------------------------------------
41import Control.Applicative
41import Control.Applicative
42+import Data.Monoid ((<>))
43+import qualified Data.Set as Set
44+import qualified Data.Text.Encoding as E
42import qualified Data.CaseInsensitive as CI
45import qualified Data.CaseInsensitive as CI
43import Data.Functor.Identity
46import Data.Functor.Identity
44−import qualified Data.Map as Map
45−import Data.Monoid ((<>))
46import Data.Proxy (Proxy (..))
47import Data.Proxy (Proxy (..))
47−import qualified Data.Set as Set
48+import qualified Data.Map as Map
48import Data.Text (Text)
49import Data.Text (Text)
49import qualified Data.Text as T
50import qualified Data.Text as T
50−import qualified Data.Text.Encoding as E
51import GHC.Exts (Constraint)
51import GHC.Exts (Constraint)
52import GHC.TypeLits (KnownSymbol, symbolVal)
52import GHC.TypeLits (KnownSymbol, symbolVal)
53−import Servant.API ((:<|>) (..), (:>), BasicAuth,
53+import Servant.API ((:<|>)(..),(:>), BasicAuth,
54− BasicAuthData, BuildHeadersTo (..),
54+ BasicAuthData, BuildHeadersTo(..),
55− Capture, Header, Headers (..),
55+ Capture, contentType, Header,
56− HttpVersion, IsSecure,
56+ Headers(..), HttpVersion, IsSecure,
57− MimeRender (..), MimeUnrender,
57+ MimeRender(..), MimeUnrender,
58 NoContent, QueryFlag, QueryParam,
58 NoContent, QueryFlag, QueryParam,
59− QueryParams, Raw, ReflectMethod (..),
59+ QueryParams, Raw, ReflectMethod(..),
60 RemoteHost, ReqBody,
60 RemoteHost, ReqBody,
61− ToHttpApiData (..), Vault, Verb,
61+ ToHttpApiData(..), Vault, Verb)
62− contentType)
63−import Servant.API.Description (Summary)
64import qualified Servant.Auth as Auth
62import qualified Servant.Auth as Auth
65
63
66import Reflex.Dom.Core (Dynamic, Event, Reflex,
64import Reflex.Dom.Core (Dynamic, Event, Reflex,
67− XhrRequest (..), XhrResponse (..),
65+ XhrRequest(..),
68− XhrResponseHeaders (..),
66+ XhrResponseHeaders(..),
69− attachPromptlyDynWith, constDyn, ffor,
67+ XhrResponse(..), attachPromptlyDynWith, constDyn, ffor, fmapMaybe,
70− fmapMaybe, leftmost,
71− performRequestsAsync)
68+ leftmost, performRequestsAsync,
69+ )
72------------------------------------------------------------------------------
70------------------------------------------------------------------------------
73import Servant.Common.BaseUrl (BaseUrl(..), Scheme(..), baseUrlWidget,
71import Servant.Common.BaseUrl (BaseUrl(..), Scheme(..), baseUrlWidget,
74 showBaseUrl,
72 showBaseUrl,
@@ -329,19 +327,6 @@ instance HasClient t m sublayout tag
329 clientWithRouteAndResultHandler Proxy =
327 clientWithRouteAndResultHandler Proxy =
330 clientWithRouteAndResultHandler (Proxy :: Proxy sublayout)
328 clientWithRouteAndResultHandler (Proxy :: Proxy sublayout)
331
329
332−-- | Using a 'Summary' combinator in your API doesn't affect the client
333−-- functions.
334−instance (HasClient t m sublayout tag, KnownSymbol sym)
335− => HasClient t m (Summary sym :> sublayout) tag where
336−
337− type Client t m (Summary sym :> sublayout) tag =
338− Client t m sublayout tag
339−
340− clientWithRouteAndResultHandler Proxy =
341− clientWithRouteAndResultHandler (Proxy :: Proxy sublayout)
342−
343−
344−
345
330
346-- | If you use a 'QueryParam' in one of your endpoints in your API,
331-- | If you use a 'QueryParam' in one of your endpoints in your API,
347-- the corresponding querying function will automatically take
332-- the corresponding querying function will automatically take
src/Servant/Reflex/Multi.hs+22−35
@@ -37,30 +37,28 @@ module Servant.Reflex.Multi (
37 ) where
37 ) where
38
38
39------------------------------------------------------------------------------
39------------------------------------------------------------------------------
40−import Control.Applicative (liftA2)
40+import Control.Applicative (liftA2)
41−import Data.Functor.Compose (Compose (..), getCompose)
41+import Data.Functor.Compose (Compose (..), getCompose)
42−import Data.Proxy (Proxy (..))
42+import Data.Proxy (Proxy (..))
43−import qualified Data.Set as Set
43+import qualified Data.Set as Set
44−import Data.Text (Text)
44+import Data.Text (Text)
45−import qualified Data.Text as T
45+import qualified Data.Text as T
46−import qualified Data.Text.Encoding as E
46+import qualified Data.Text.Encoding as E
47−import GHC.TypeLits (KnownSymbol, symbolVal)
47+import GHC.TypeLits (KnownSymbol, symbolVal)
48−import Servant.API ((:<|>) (..), (:>), BasicAuth,
48+import Servant.API ((:<|>) (..), (:>), BasicAuth,
49− BasicAuthData, BuildHeadersTo (..),
49+ BasicAuthData, BuildHeadersTo (..),
50− Capture, Header, Headers (..),
50+ Capture, Header, Headers (..),
51− HttpVersion, IsSecure,
51+ HttpVersion, IsSecure, MimeRender (..),
52− MimeRender (..), MimeUnrender,
53− NoContent, QueryFlag, QueryParam,
52+ MimeUnrender, NoContent, QueryFlag,
54− QueryParams, Raw, ReflectMethod (..),
53+ QueryParam, QueryParams, Raw,
55− RemoteHost, ReqBody,
54+ ReflectMethod (..), RemoteHost,
56− ToHttpApiData (..), Vault, Verb,
55+ ReqBody, ToHttpApiData (..), Vault,
57− contentType)
56+ Verb, contentType)
58−import Servant.API.Description (Summary)
57+
59−
60−import Reflex.Dom.Core (Dynamic, Event, Reflex,
58+import Reflex.Dom.Core (Dynamic, Event, Reflex,
61− XhrRequest (..),
59+ XhrRequest (..),
62− XhrResponseHeaders (..),
60+ XhrResponseHeaders (..),
63− attachPromptlyDynWith, constDyn)
61+ attachPromptlyDynWith, constDyn)
64------------------------------------------------------------------------------
62------------------------------------------------------------------------------
65import Servant.Common.BaseUrl (BaseUrl (..), Scheme (..),
63import Servant.Common.BaseUrl (BaseUrl (..), Scheme (..),
66 SupportsServantReflex)
64 SupportsServantReflex)
@@ -242,17 +240,6 @@ instance HasClientMulti t m sublayout f tag
242 clientWithRouteMulti (Proxy :: Proxy sublayout) q f tag
240 clientWithRouteMulti (Proxy :: Proxy sublayout) q f tag
243
241
244
242
245−------------------------------------------------------------------------------
246−instance (HasClientMulti t m sublayout f tag, KnownSymbol sym)
247− => HasClientMulti t m (Summary sym :> sublayout) f tag where
248−
249− type ClientMulti t m (Summary sym :> sublayout) f tag =
250− ClientMulti t m sublayout f tag
251−
252− clientWithRouteMulti Proxy q f tag =
253− clientWithRouteMulti (Proxy :: Proxy sublayout) q f tag
254−
255−
256------------------------------------------------------------------------------
243------------------------------------------------------------------------------
257instance (KnownSymbol sym,
244instance (KnownSymbol sym,
258 ToHttpApiData a,
245 ToHttpApiData a,
travis.nix−1
@@ -48,7 +48,6 @@ in
48 inherit reflexPlatform ghcPkgs ghcjsPkgs;
48 inherit reflexPlatform ghcPkgs ghcjsPkgs;
49
49
50 build = ghcjsPkgs.servant-reflex;
50 build = ghcjsPkgs.servant-reflex;
51− buildGhc = ghcPkgs.servant-reflex;
52 testserver = ghcPkgs.testserver;
51 testserver = ghcPkgs.testserver;
53 testdriver = ghcPkgs.testdriver;
52 testdriver = ghcPkgs.testdriver;
54 inherit testresults;
53 inherit testresults;