elm-pages 2.1.10 → 3.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
  2. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
  3. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
  4. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
  5. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmi +0 -0
  6. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmo +0 -0
  7. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
  8. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
  9. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
  10. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmo +0 -0
  11. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  12. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  13. package/generator/{template/public/style.css → review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock} +0 -0
  14. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  15. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -0
  16. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
  17. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +27617 -0
  18. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
  19. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
  20. package/generator/review/elm-stuff/tests-0.19.1/js/package.json +1 -0
  21. package/generator/review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
  22. package/generator/review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
  23. package/generator/review/elm.json +13 -4
  24. package/{src → generator/review/src}/Pages/Review/NoContractViolations.elm +148 -148
  25. package/generator/review/tests/Pages/Review/NoContractViolationsTest.elm +331 -0
  26. package/generator/src/RouteBuilder.elm +420 -0
  27. package/generator/src/SharedTemplate.elm +4 -5
  28. package/generator/src/SiteConfig.elm +3 -9
  29. package/generator/src/build.js +308 -95
  30. package/generator/src/cli.js +103 -8
  31. package/generator/src/codegen.js +192 -35
  32. package/generator/src/compile-elm.js +183 -31
  33. package/generator/src/dev-server.js +353 -96
  34. package/generator/src/elm-application.json +3 -1
  35. package/generator/src/elm-codegen.js +34 -0
  36. package/generator/src/elm-file-constants.js +2 -0
  37. package/generator/src/error-formatter.js +20 -1
  38. package/generator/src/generate-template-module-connector.js +120 -924
  39. package/generator/src/hello.ts +5 -0
  40. package/generator/src/pre-render-html.js +58 -104
  41. package/generator/src/render-worker.js +27 -13
  42. package/generator/src/render.js +252 -197
  43. package/generator/src/request-cache-fs.js +18 -0
  44. package/generator/src/request-cache.js +128 -56
  45. package/generator/src/rewrite-client-elm-json.js +49 -0
  46. package/generator/src/route-codegen-helpers.js +62 -1
  47. package/generator/static-code/dev-style.css +22 -0
  48. package/generator/static-code/elm-pages.js +43 -39
  49. package/generator/static-code/hmr.js +98 -88
  50. package/generator/template/app/Api.elm +25 -0
  51. package/generator/template/app/ErrorPage.elm +38 -0
  52. package/generator/template/app/Route/Index.elm +87 -0
  53. package/generator/template/{src → app}/Shared.elm +34 -13
  54. package/generator/template/app/Site.elm +19 -0
  55. package/generator/template/{src → app}/View.elm +0 -0
  56. package/generator/template/elm-pages.config.mjs +5 -0
  57. package/generator/template/elm.json +14 -5
  58. package/generator/template/{public/index.js → index.ts} +7 -3
  59. package/generator/template/package.json +5 -5
  60. package/generator/template/public/favicon.ico +0 -0
  61. package/generator/template/public/images/icon-png.png +0 -0
  62. package/generator/template/src/.gitkeep +0 -0
  63. package/generator/template/style.css +4 -0
  64. package/package.json +30 -23
  65. package/src/ApiRoute.elm +176 -43
  66. package/src/BuildError.elm +10 -1
  67. package/src/CookieParser.elm +84 -0
  68. package/src/DataSource/Env.elm +38 -0
  69. package/src/DataSource/File.elm +27 -16
  70. package/src/DataSource/Glob.elm +126 -80
  71. package/src/DataSource/Http.elm +283 -304
  72. package/src/DataSource/Internal/Glob.elm +5 -21
  73. package/src/DataSource/Internal/Request.elm +25 -0
  74. package/src/DataSource/Port.elm +17 -14
  75. package/src/DataSource.elm +55 -318
  76. package/src/Form/Field.elm +717 -0
  77. package/src/Form/FieldStatus.elm +36 -0
  78. package/src/Form/FieldView.elm +417 -0
  79. package/src/Form/FormData.elm +22 -0
  80. package/src/Form/Validation.elm +391 -0
  81. package/src/Form/Value.elm +118 -0
  82. package/src/Form.elm +1683 -0
  83. package/src/FormData.elm +58 -0
  84. package/src/FormDecoder.elm +102 -0
  85. package/src/Head/Seo.elm +12 -4
  86. package/src/Head.elm +12 -2
  87. package/src/HtmlPrinter.elm +1 -1
  88. package/src/Internal/ApiRoute.elm +17 -4
  89. package/src/Internal/Request.elm +7 -0
  90. package/src/PageServerResponse.elm +68 -0
  91. package/src/Pages/ContentCache.elm +1 -229
  92. package/src/Pages/Fetcher.elm +58 -0
  93. package/src/Pages/FormState.elm +256 -0
  94. package/src/Pages/Generate.elm +800 -0
  95. package/src/Pages/Internal/Form.elm +17 -0
  96. package/src/Pages/Internal/NotFoundReason.elm +3 -55
  97. package/src/Pages/Internal/Platform/Cli.elm +777 -579
  98. package/src/Pages/Internal/Platform/Effect.elm +5 -5
  99. package/src/Pages/Internal/Platform/StaticResponses.elm +178 -394
  100. package/src/Pages/Internal/Platform/ToJsPayload.elm +24 -23
  101. package/src/Pages/Internal/Platform.elm +1244 -504
  102. package/src/Pages/Internal/ResponseSketch.elm +19 -0
  103. package/src/Pages/Internal/RoutePattern.elm +596 -45
  104. package/src/Pages/Manifest.elm +26 -0
  105. package/src/Pages/Msg.elm +79 -0
  106. package/src/Pages/ProgramConfig.elm +67 -14
  107. package/src/Pages/SiteConfig.elm +3 -6
  108. package/src/Pages/StaticHttp/Request.elm +4 -2
  109. package/src/Pages/StaticHttpRequest.elm +50 -215
  110. package/src/Pages/Transition.elm +70 -0
  111. package/src/Path.elm +1 -0
  112. package/src/Pattern.elm +98 -0
  113. package/src/RenderRequest.elm +2 -2
  114. package/src/RequestsAndPending.elm +111 -9
  115. package/src/Server/Request.elm +1253 -0
  116. package/src/Server/Response.elm +292 -0
  117. package/src/Server/Session.elm +316 -0
  118. package/src/Server/SetCookie.elm +169 -0
  119. package/src/TerminalText.elm +1 -1
  120. package/src/Test/Html/Internal/ElmHtml/Markdown.elm +0 -1
  121. package/src/Test/Html/Internal/ElmHtml/ToString.elm +1 -1
  122. package/generator/src/Page.elm +0 -359
  123. package/generator/src/codegen-template-module.js +0 -183
  124. package/generator/src/elm-pages-js-minified.js +0 -1
  125. package/generator/template/src/Api.elm +0 -14
  126. package/generator/template/src/Page/Index.elm +0 -69
  127. package/generator/template/src/Site.elm +0 -41
  128. package/src/DataSource/ServerRequest.elm +0 -60
  129. package/src/Internal/OptimizedDecoder.elm +0 -18
  130. package/src/KeepOrDiscard.elm +0 -6
  131. package/src/OptimizedDecoder/Pipeline.elm +0 -335
  132. package/src/OptimizedDecoder.elm +0 -818
  133. package/src/Pages/Internal/ApplicationType.elm +0 -6
  134. package/src/Pages/Secrets.elm +0 -83
  135. package/src/Secrets.elm +0 -111
  136. package/src/SecretsDict.elm +0 -45
@@ -3,6 +3,7 @@ module Pages.Manifest exposing
3
3
  , init
4
4
  , withBackgroundColor, withCategories, withDisplayMode, withIarcRatingId, withLang, withOrientation, withShortName, withThemeColor
5
5
  , DisplayMode(..), Orientation(..), IconPurpose(..)
6
+ , generator
6
7
  , toJson
7
8
  )
8
9
 
@@ -45,14 +46,22 @@ You pass your `Pages.Manifest.Config` record into the `Pages.application` functi
45
46
  @docs DisplayMode, Orientation, IconPurpose
46
47
 
47
48
 
49
+ ## Generating a Manifest.json
50
+
51
+ @docs generator
52
+
53
+
48
54
  ## Functions for use by the generated code (`Pages.elm`)
49
55
 
50
56
  @docs toJson
51
57
 
52
58
  -}
53
59
 
60
+ import ApiRoute
54
61
  import Color exposing (Color)
55
62
  import Color.Convert
63
+ import DataSource exposing (DataSource)
64
+ import Head
56
65
  import Json.Encode as Encode
57
66
  import LanguageTag exposing (LanguageTag, emptySubtags)
58
67
  import LanguageTag.Country as Country
@@ -313,6 +322,23 @@ nonEmptyList list =
313
322
  Just list
314
323
 
315
324
 
325
+ {-| A generator for Api.elm to include a manifest.json.
326
+ -}
327
+ generator : String -> DataSource Config -> ApiRoute.ApiRoute ApiRoute.Response
328
+ generator canonicalSiteUrl config =
329
+ ApiRoute.succeed
330
+ (config
331
+ |> DataSource.map (toJson canonicalSiteUrl >> Encode.encode 0)
332
+ )
333
+ |> ApiRoute.literal "manifest.json"
334
+ |> ApiRoute.single
335
+ |> ApiRoute.withGlobalHeadTags
336
+ (DataSource.succeed
337
+ [ Head.manifestLink "/manifest.json"
338
+ ]
339
+ )
340
+
341
+
316
342
  {-| Feel free to use this, but in 99% of cases you won't need it. The generated
317
343
  code will run this for you to generate your `manifest.json` file automatically!
318
344
  -}
@@ -0,0 +1,79 @@
1
+ module Pages.Msg exposing
2
+ ( Msg(..)
3
+ , map, onSubmit, fetcherOnSubmit, submitIfValid
4
+ )
5
+
6
+ {-|
7
+
8
+ @docs Msg
9
+
10
+ @docs map, onSubmit, fetcherOnSubmit, submitIfValid
11
+
12
+ -}
13
+
14
+ import Form.FormData exposing (FormData)
15
+ import FormDecoder
16
+ import Html exposing (Attribute)
17
+ import Html.Attributes as Attr
18
+ import Json.Decode
19
+
20
+
21
+ {-| -}
22
+ type Msg userMsg
23
+ = UserMsg userMsg
24
+ | Submit FormData
25
+ | SubmitIfValid String FormData Bool
26
+ | SubmitFetcher String FormData Bool (Maybe userMsg)
27
+ | FormFieldEvent Json.Decode.Value
28
+
29
+
30
+ {-| -}
31
+ onSubmit : Attribute (Msg userMsg)
32
+ onSubmit =
33
+ FormDecoder.formDataOnSubmit
34
+ |> Attr.map Submit
35
+
36
+
37
+ {-| -}
38
+ submitIfValid : String -> (List ( String, String ) -> Bool) -> Attribute (Msg userMsg)
39
+ submitIfValid formId isValid =
40
+ FormDecoder.formDataOnSubmit
41
+ |> Attr.map (\formData -> SubmitIfValid formId formData (isValid formData.fields))
42
+
43
+
44
+ {-| -}
45
+ fetcherOnSubmit : Maybe ({ fields : List ( String, String ) } -> userMsg) -> String -> (List ( String, String ) -> Bool) -> Attribute (Msg userMsg)
46
+ fetcherOnSubmit userMsg formId isValid =
47
+ FormDecoder.formDataOnSubmit
48
+ |> Attr.map
49
+ (\formData ->
50
+ SubmitFetcher formId
51
+ formData
52
+ (isValid formData.fields)
53
+ (userMsg
54
+ |> Maybe.map
55
+ (\toUserMsg ->
56
+ toUserMsg { fields = formData.fields }
57
+ )
58
+ )
59
+ )
60
+
61
+
62
+ {-| -}
63
+ map : (a -> b) -> Msg a -> Msg b
64
+ map mapFn msg =
65
+ case msg of
66
+ UserMsg userMsg ->
67
+ UserMsg (mapFn userMsg)
68
+
69
+ Submit info ->
70
+ Submit info
71
+
72
+ SubmitIfValid formId info isValid ->
73
+ SubmitIfValid formId info isValid
74
+
75
+ SubmitFetcher formId info isValid toUserMsg ->
76
+ SubmitFetcher formId info isValid (Maybe.map mapFn toUserMsg)
77
+
78
+ FormFieldEvent value ->
79
+ FormFieldEvent value
@@ -2,26 +2,39 @@ module Pages.ProgramConfig exposing (ProgramConfig)
2
2
 
3
3
  import ApiRoute
4
4
  import Browser.Navigation
5
- import DataSource
5
+ import Bytes exposing (Bytes)
6
+ import Bytes.Decode
7
+ import Bytes.Encode
8
+ import DataSource exposing (DataSource)
9
+ import Dict exposing (Dict)
10
+ import Form.FormData exposing (FormData)
6
11
  import Head
7
12
  import Html exposing (Html)
13
+ import Http
8
14
  import Json.Decode as Decode
9
15
  import Json.Encode
16
+ import PageServerResponse exposing (PageServerResponse)
17
+ import Pages.Fetcher
10
18
  import Pages.Flags
19
+ import Pages.FormState
11
20
  import Pages.Internal.NotFoundReason exposing (NotFoundReason)
21
+ import Pages.Internal.Platform.ToJsPayload
22
+ import Pages.Internal.ResponseSketch exposing (ResponseSketch)
12
23
  import Pages.Internal.RoutePattern exposing (RoutePattern)
24
+ import Pages.Msg
13
25
  import Pages.PageUrl exposing (PageUrl)
14
26
  import Pages.SiteConfig exposing (SiteConfig)
27
+ import Pages.Transition
15
28
  import Path exposing (Path)
16
29
  import Url exposing (Url)
17
30
 
18
31
 
19
- type alias ProgramConfig userMsg userModel route siteData pageData sharedData =
32
+ type alias ProgramConfig userMsg userModel route pageData actionData sharedData effect mappedMsg errorPage =
20
33
  { init :
21
34
  Pages.Flags.Flags
22
35
  -> sharedData
23
36
  -> pageData
24
- -> Maybe Browser.Navigation.Key
37
+ -> Maybe actionData
25
38
  ->
26
39
  Maybe
27
40
  { path :
@@ -32,29 +45,38 @@ type alias ProgramConfig userMsg userModel route siteData pageData sharedData =
32
45
  , metadata : route
33
46
  , pageUrl : Maybe PageUrl
34
47
  }
35
- -> ( userModel, Cmd userMsg )
36
- , update : sharedData -> pageData -> Maybe Browser.Navigation.Key -> userMsg -> userModel -> ( userModel, Cmd userMsg )
48
+ -> ( userModel, effect )
49
+ , update : Pages.FormState.PageFormState -> Dict String (Pages.Transition.FetcherState actionData) -> Maybe Pages.Transition.Transition -> sharedData -> pageData -> Maybe Browser.Navigation.Key -> userMsg -> userModel -> ( userModel, effect )
37
50
  , subscriptions : route -> Path -> userModel -> Sub userMsg
38
- , sharedData : DataSource.DataSource sharedData
39
- , data : route -> DataSource.DataSource pageData
51
+ , sharedData : DataSource sharedData
52
+ , data : route -> DataSource (PageServerResponse pageData errorPage)
53
+ , action : route -> DataSource (PageServerResponse actionData errorPage)
54
+ , onActionData : actionData -> Maybe userMsg
40
55
  , view :
41
- { path : Path
42
- , route : route
43
- }
56
+ Pages.FormState.PageFormState
57
+ -> Dict String (Pages.Transition.FetcherState actionData)
58
+ -> Maybe Pages.Transition.Transition
59
+ ->
60
+ { path : Path
61
+ , route : route
62
+ }
44
63
  -> Maybe PageUrl
45
64
  -> sharedData
46
65
  -> pageData
66
+ -> Maybe actionData
47
67
  ->
48
- { view : userModel -> { title : String, body : Html userMsg }
68
+ { view : userModel -> { title : String, body : Html (Pages.Msg.Msg userMsg) }
49
69
  , head : List Head.Tag
50
70
  }
51
- , handleRoute : route -> DataSource.DataSource (Maybe NotFoundReason)
52
- , getStaticRoutes : DataSource.DataSource (List route)
71
+ , handleRoute : route -> DataSource (Maybe NotFoundReason)
72
+ , getStaticRoutes : DataSource (List route)
53
73
  , urlToRoute : Url -> route
54
74
  , routeToPath : route -> List String
55
- , site : Maybe (SiteConfig siteData)
75
+ , site : Maybe SiteConfig
56
76
  , toJsPort : Json.Encode.Value -> Cmd Never
57
77
  , fromJsPort : Sub Decode.Value
78
+ , gotBatchSub : Sub Decode.Value
79
+ , hotReloadData : Sub Bytes
58
80
  , onPageChange :
59
81
  { protocol : Url.Protocol
60
82
  , host : String
@@ -70,4 +92,35 @@ type alias ProgramConfig userMsg userModel route siteData pageData sharedData =
70
92
  -> List (ApiRoute.ApiRoute ApiRoute.Response)
71
93
  , pathPatterns : List RoutePattern
72
94
  , basePath : List String
95
+ , sendPageData : Pages.Internal.Platform.ToJsPayload.NewThingForPort -> Cmd Never
96
+ , byteEncodePageData : pageData -> Bytes.Encode.Encoder
97
+ , byteDecodePageData : route -> Bytes.Decode.Decoder pageData
98
+ , encodeResponse : ResponseSketch pageData actionData sharedData -> Bytes.Encode.Encoder
99
+ , encodeAction : actionData -> Bytes.Encode.Encoder
100
+ , decodeResponse : Bytes.Decode.Decoder (ResponseSketch pageData actionData sharedData)
101
+ , globalHeadTags : Maybe ((Html Never -> String) -> DataSource (List Head.Tag))
102
+ , cmdToEffect : Cmd userMsg -> effect
103
+ , perform :
104
+ { fetchRouteData :
105
+ { data : Maybe FormData
106
+ , toMsg : Result Http.Error Url -> userMsg
107
+ }
108
+ -> Cmd mappedMsg
109
+ , submit :
110
+ { values : FormData
111
+ , toMsg : Result Http.Error Url -> userMsg
112
+ }
113
+ -> Cmd mappedMsg
114
+ , fromPageMsg : userMsg -> mappedMsg
115
+ , runFetcher : Pages.Fetcher.Fetcher userMsg -> Cmd mappedMsg
116
+ , key : Browser.Navigation.Key
117
+ , setField : { formId : String, name : String, value : String } -> Cmd mappedMsg
118
+ }
119
+ -> effect
120
+ -> Cmd mappedMsg
121
+ , errorStatusCode : errorPage -> Int
122
+ , notFoundPage : errorPage
123
+ , internalError : String -> errorPage
124
+ , errorPageToData : errorPage -> pageData
125
+ , notFoundRoute : route
73
126
  }
@@ -2,12 +2,9 @@ module Pages.SiteConfig exposing (SiteConfig)
2
2
 
3
3
  import DataSource exposing (DataSource)
4
4
  import Head
5
- import Pages.Manifest
6
5
 
7
6
 
8
- type alias SiteConfig data =
9
- { data : DataSource data
10
- , canonicalUrl : String
11
- , manifest : data -> Pages.Manifest.Config
12
- , head : data -> List Head.Tag
7
+ type alias SiteConfig =
8
+ { canonicalUrl : String
9
+ , head : DataSource (List Head.Tag)
13
10
  }
@@ -1,8 +1,8 @@
1
1
  module Pages.StaticHttp.Request exposing (Request, codec, hash)
2
2
 
3
3
  import Codec exposing (Codec)
4
+ import FNV1a
4
5
  import Json.Encode as Encode
5
- import Murmur3
6
6
  import Pages.Internal.StaticHttpBody as StaticHttpBody exposing (Body)
7
7
 
8
8
 
@@ -11,6 +11,7 @@ type alias Request =
11
11
  , method : String
12
12
  , headers : List ( String, String )
13
13
  , body : Body
14
+ , useCache : Bool
14
15
  }
15
16
 
16
17
 
@@ -23,7 +24,7 @@ hash requestDetails =
23
24
  , ( "body", StaticHttpBody.encode requestDetails.body )
24
25
  ]
25
26
  |> Encode.encode 0
26
- |> Murmur3.hashString 0
27
+ |> FNV1a.hash
27
28
  |> String.fromInt
28
29
 
29
30
 
@@ -39,4 +40,5 @@ codec =
39
40
  |> Codec.field "method" .method Codec.string
40
41
  |> Codec.field "headers" .headers (Codec.list (Codec.tuple Codec.string Codec.string))
41
42
  |> Codec.field "body" .body StaticHttpBody.codec
43
+ |> Codec.field "useCache" .useCache Codec.bool
42
44
  |> Codec.buildObject
@@ -1,203 +1,26 @@
1
- module Pages.StaticHttpRequest exposing (Error(..), RawRequest(..), Status(..), WhatToDo(..), cacheRequestResolution, merge, resolve, resolveUrls, strippedResponsesEncode, toBuildError)
1
+ module Pages.StaticHttpRequest exposing (Error(..), MockResolver, RawRequest(..), Status(..), cacheRequestResolution, mockResolve, resolve, resolveUrls, toBuildError)
2
2
 
3
3
  import BuildError exposing (BuildError)
4
- import Dict exposing (Dict)
5
- import Internal.OptimizedDecoder
6
- import Json.Decode.Exploration
7
- import Json.Encode
8
- import KeepOrDiscard exposing (KeepOrDiscard)
4
+ import Dict
9
5
  import List.Extra
10
- import OptimizedDecoder
11
- import Pages.Internal.ApplicationType exposing (ApplicationType)
12
6
  import Pages.StaticHttp.Request
13
7
  import RequestsAndPending exposing (RequestsAndPending)
14
- import Secrets
15
8
  import TerminalText as Terminal
16
9
 
17
10
 
11
+ type alias MockResolver =
12
+ Pages.StaticHttp.Request.Request
13
+ -> Maybe RequestsAndPending.Response
14
+
15
+
18
16
  type RawRequest value
19
- = Request (Dict String WhatToDo) ( List (Secrets.Value Pages.StaticHttp.Request.Request), KeepOrDiscard -> ApplicationType -> RequestsAndPending -> RawRequest value )
17
+ = Request (List Pages.StaticHttp.Request.Request) (Maybe MockResolver -> RequestsAndPending -> RawRequest value)
20
18
  | RequestError Error
21
- | ApiRoute (Dict String WhatToDo) value
22
-
23
-
24
- type WhatToDo
25
- = UseRawResponse
26
- | CliOnly
27
- | StripResponse (OptimizedDecoder.Decoder ())
28
- | DistilledResponse Json.Encode.Value
29
- | Error (List BuildError)
30
-
31
-
32
- merge : String -> WhatToDo -> WhatToDo -> WhatToDo
33
- merge key whatToDo1 whatToDo2 =
34
- case ( whatToDo1, whatToDo2 ) of
35
- ( Error buildErrors1, Error buildErrors2 ) ->
36
- Error (buildErrors1 ++ buildErrors2)
37
-
38
- ( Error buildErrors1, _ ) ->
39
- Error buildErrors1
40
-
41
- ( _, Error buildErrors1 ) ->
42
- Error buildErrors1
43
-
44
- ( StripResponse strip1, StripResponse strip2 ) ->
45
- StripResponse (OptimizedDecoder.map2 (\_ _ -> ()) strip1 strip2)
46
-
47
- ( StripResponse strip1, _ ) ->
48
- StripResponse strip1
49
-
50
- ( _, StripResponse strip1 ) ->
51
- StripResponse strip1
52
-
53
- ( _, CliOnly ) ->
54
- whatToDo1
55
-
56
- ( CliOnly, _ ) ->
57
- whatToDo2
58
-
59
- ( DistilledResponse distilled1, DistilledResponse distilled2 ) ->
60
- if Json.Encode.encode 0 distilled1 == Json.Encode.encode 0 distilled2 then
61
- DistilledResponse distilled1
62
-
63
- else
64
- Error
65
- [ { title = "Non-Unique Distill Keys"
66
- , message =
67
- [ Terminal.text "I encountered DataSource.distill with two matching keys that had differing encoded values.\n\n"
68
- , Terminal.text "Look for "
69
- , Terminal.red <| "DataSource.distill"
70
- , Terminal.text " with the key "
71
- , Terminal.red <| ("\"" ++ key ++ "\"")
72
- , Terminal.text "\n\n"
73
- , Terminal.yellow <| "The first encoded value was:\n"
74
- , Terminal.text <| Json.Encode.encode 2 distilled1
75
- , Terminal.text "\n\n-------------------------------\n\n"
76
- , Terminal.yellow <| "The second encoded value was:\n"
77
- , Terminal.text <| Json.Encode.encode 2 distilled2
78
- ]
79
- , path = "" -- TODO wire in path here?
80
- , fatal = True
81
- }
82
- ]
83
-
84
- ( DistilledResponse distilled1, _ ) ->
85
- DistilledResponse distilled1
86
-
87
- ( _, DistilledResponse distilled1 ) ->
88
- DistilledResponse distilled1
89
-
90
- ( UseRawResponse, UseRawResponse ) ->
91
- UseRawResponse
92
-
93
-
94
- strippedResponses : ApplicationType -> RawRequest value -> RequestsAndPending -> Dict String WhatToDo
95
- strippedResponses =
96
- strippedResponsesHelp Dict.empty
97
-
98
-
99
- strippedResponsesEncode : ApplicationType -> RawRequest value -> RequestsAndPending -> Result (List BuildError) (Dict String String)
100
- strippedResponsesEncode appType rawRequest requestsAndPending =
101
- strippedResponses appType rawRequest requestsAndPending
102
- |> Dict.toList
103
- |> List.map
104
- (\( k, whatToDo ) ->
105
- (case whatToDo of
106
- UseRawResponse ->
107
- Dict.get k requestsAndPending
108
- |> Maybe.withDefault Nothing
109
- |> Maybe.withDefault ""
110
- |> Just
111
- |> Ok
112
-
113
- StripResponse decoder ->
114
- Dict.get k requestsAndPending
115
- |> Maybe.withDefault Nothing
116
- |> Maybe.withDefault ""
117
- |> Json.Decode.Exploration.stripString (Internal.OptimizedDecoder.jde decoder)
118
- |> Result.withDefault "ERROR"
119
- |> Just
120
- |> Ok
121
-
122
- CliOnly ->
123
- Nothing
124
- |> Ok
125
-
126
- DistilledResponse value ->
127
- value
128
- |> Json.Encode.encode 0
129
- |> Just
130
- |> Ok
131
-
132
- Error buildError ->
133
- Err buildError
134
- )
135
- |> Result.map (Maybe.map (Tuple.pair k))
136
- )
137
- |> combineMultipleErrors
138
- |> Result.map (List.filterMap identity)
139
- |> Result.map Dict.fromList
140
-
141
-
142
- combineMultipleErrors : List (Result (List error) a) -> Result (List error) (List a)
143
- combineMultipleErrors results =
144
- List.foldr
145
- (\result soFarResult ->
146
- case soFarResult of
147
- Ok soFarOk ->
148
- case result of
149
- Ok value ->
150
- value :: soFarOk |> Ok
151
-
152
- Err error_ ->
153
- Err error_
154
-
155
- Err errorsSoFar ->
156
- case result of
157
- Ok _ ->
158
- Err errorsSoFar
159
-
160
- Err error_ ->
161
- Err <| error_ ++ errorsSoFar
162
- )
163
- (Ok [])
164
- results
165
-
166
-
167
- strippedResponsesHelp : Dict String WhatToDo -> ApplicationType -> RawRequest value -> RequestsAndPending -> Dict String WhatToDo
168
- strippedResponsesHelp usedSoFar appType request rawResponses =
169
- case request of
170
- RequestError _ ->
171
- usedSoFar
172
-
173
- Request partiallyStrippedResponses ( _, lookupFn ) ->
174
- case lookupFn KeepOrDiscard.Keep appType rawResponses of
175
- followupRequest ->
176
- strippedResponsesHelp
177
- (Dict.merge
178
- (\key a -> Dict.insert key a)
179
- (\key a b -> Dict.insert key (merge key a b))
180
- (\key b -> Dict.insert key b)
181
- usedSoFar
182
- partiallyStrippedResponses
183
- Dict.empty
184
- )
185
- appType
186
- followupRequest
187
- rawResponses
188
-
189
- ApiRoute partiallyStrippedResponses _ ->
190
- Dict.merge
191
- (\key a -> Dict.insert key a)
192
- (\key a b -> Dict.insert key (merge key a b))
193
- (\key b -> Dict.insert key b)
194
- usedSoFar
195
- partiallyStrippedResponses
196
- Dict.empty
19
+ | ApiRoute value
197
20
 
198
21
 
199
22
  type Error
200
- = MissingHttpResponse String (List (Secrets.Value Pages.StaticHttp.Request.Request))
23
+ = MissingHttpResponse String (List Pages.StaticHttp.Request.Request)
201
24
  | DecoderError String
202
25
  | UserCalledStaticHttpFail String
203
26
 
@@ -233,70 +56,83 @@ toBuildError path error =
233
56
  }
234
57
 
235
58
 
236
- resolve : ApplicationType -> RawRequest value -> RequestsAndPending -> Result Error value
237
- resolve appType request rawResponses =
59
+ resolve : RawRequest value -> RequestsAndPending -> Result Error value
60
+ resolve request rawResponses =
238
61
  case request of
239
62
  RequestError error ->
240
63
  Err error
241
64
 
242
- Request _ ( _, lookupFn ) ->
243
- case lookupFn KeepOrDiscard.Keep appType rawResponses of
65
+ Request _ lookupFn ->
66
+ case lookupFn Nothing rawResponses of
244
67
  nextRequest ->
245
- resolve appType nextRequest rawResponses
68
+ resolve nextRequest rawResponses
246
69
 
247
- ApiRoute _ value ->
70
+ ApiRoute value ->
248
71
  Ok value
249
72
 
250
73
 
251
- resolveUrls : ApplicationType -> RawRequest value -> RequestsAndPending -> List (Secrets.Value Pages.StaticHttp.Request.Request)
252
- resolveUrls appType request rawResponses =
253
- resolveUrlsHelp appType rawResponses [] request
74
+ mockResolve : RawRequest value -> MockResolver -> Result Error value
75
+ mockResolve request mockResolver =
76
+ case request of
77
+ RequestError error ->
78
+ Err error
254
79
 
80
+ Request _ lookupFn ->
81
+ case lookupFn (Just mockResolver) Dict.empty of
82
+ nextRequest ->
83
+ mockResolve nextRequest mockResolver
255
84
 
256
- resolveUrlsHelp : ApplicationType -> RequestsAndPending -> List (Secrets.Value Pages.StaticHttp.Request.Request) -> RawRequest value -> List (Secrets.Value Pages.StaticHttp.Request.Request)
257
- resolveUrlsHelp appType rawResponses soFar request =
85
+ ApiRoute value ->
86
+ Ok value
87
+
88
+
89
+ resolveUrls : RawRequest value -> RequestsAndPending -> List Pages.StaticHttp.Request.Request
90
+ resolveUrls request rawResponses =
91
+ resolveUrlsHelp rawResponses [] request
92
+
93
+
94
+ resolveUrlsHelp : RequestsAndPending -> List Pages.StaticHttp.Request.Request -> RawRequest value -> List Pages.StaticHttp.Request.Request
95
+ resolveUrlsHelp rawResponses soFar request =
258
96
  case request of
259
97
  RequestError error ->
260
98
  case error of
261
99
  MissingHttpResponse _ next ->
262
100
  (soFar ++ next)
263
- |> List.Extra.uniqueBy (Secrets.maskedLookup >> Pages.StaticHttp.Request.hash)
101
+ |> List.Extra.uniqueBy Pages.StaticHttp.Request.hash
264
102
 
265
103
  _ ->
266
104
  soFar
267
105
 
268
- Request _ ( urlList, lookupFn ) ->
269
- resolveUrlsHelp appType
106
+ Request urlList lookupFn ->
107
+ resolveUrlsHelp
270
108
  rawResponses
271
109
  (soFar ++ urlList)
272
- (lookupFn KeepOrDiscard.Keep appType rawResponses)
110
+ (lookupFn Nothing rawResponses)
273
111
 
274
- ApiRoute _ _ ->
112
+ ApiRoute _ ->
275
113
  soFar
276
114
 
277
115
 
278
116
  cacheRequestResolution :
279
- ApplicationType
280
- -> RawRequest value
117
+ RawRequest value
281
118
  -> RequestsAndPending
282
119
  -> Status value
283
- cacheRequestResolution appType request rawResponses =
284
- cacheRequestResolutionHelp [] appType rawResponses request
120
+ cacheRequestResolution request rawResponses =
121
+ cacheRequestResolutionHelp [] rawResponses request
285
122
 
286
123
 
287
124
  type Status value
288
- = Incomplete (List (Secrets.Value Pages.StaticHttp.Request.Request))
125
+ = Incomplete (List Pages.StaticHttp.Request.Request)
289
126
  | HasPermanentError Error
290
127
  | Complete
291
128
 
292
129
 
293
130
  cacheRequestResolutionHelp :
294
- List (Secrets.Value Pages.StaticHttp.Request.Request)
295
- -> ApplicationType
131
+ List Pages.StaticHttp.Request.Request
296
132
  -> RequestsAndPending
297
133
  -> RawRequest value
298
134
  -> Status value
299
- cacheRequestResolutionHelp foundUrls appType rawResponses request =
135
+ cacheRequestResolutionHelp foundUrls rawResponses request =
300
136
  case request of
301
137
  RequestError error ->
302
138
  case error of
@@ -310,11 +146,10 @@ cacheRequestResolutionHelp foundUrls appType rawResponses request =
310
146
  UserCalledStaticHttpFail _ ->
311
147
  HasPermanentError error
312
148
 
313
- Request _ ( urlList, lookupFn ) ->
149
+ Request urlList lookupFn ->
314
150
  cacheRequestResolutionHelp urlList
315
- appType
316
151
  rawResponses
317
- (lookupFn KeepOrDiscard.Keep appType rawResponses)
152
+ (lookupFn Nothing rawResponses)
318
153
 
319
- ApiRoute _ _ ->
154
+ ApiRoute _ ->
320
155
  Complete