elm-pages 2.1.11 → 3.0.0-beta.1

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 (161) hide show
  1. package/codegen/elm-pages-codegen.js +38507 -0
  2. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
  3. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
  4. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmi +0 -0
  5. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
  6. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
  7. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
  8. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
  9. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmo +0 -0
  10. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  11. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  12. package/generator/{template/public/style.css → dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock} +0 -0
  13. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  14. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm.json +1 -0
  15. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
  16. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +25651 -0
  17. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
  18. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
  19. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/package.json +1 -0
  20. package/generator/dead-code-review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
  21. package/generator/dead-code-review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
  22. package/generator/dead-code-review/elm.json +35 -0
  23. package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +181 -0
  24. package/generator/dead-code-review/src/ReviewConfig.elm +9 -0
  25. package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +455 -0
  26. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
  27. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
  28. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
  29. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
  30. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmi +0 -0
  31. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmo +0 -0
  32. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
  33. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
  34. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
  35. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmo +0 -0
  36. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  37. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  38. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock +0 -0
  39. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  40. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -0
  41. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
  42. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +27617 -0
  43. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
  44. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
  45. package/generator/review/elm-stuff/tests-0.19.1/js/package.json +1 -0
  46. package/generator/review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
  47. package/generator/review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
  48. package/generator/review/elm.json +13 -4
  49. package/{src → generator/review/src}/Pages/Review/NoContractViolations.elm +148 -148
  50. package/generator/review/tests/Pages/Review/NoContractViolationsTest.elm +331 -0
  51. package/generator/src/RouteBuilder.elm +420 -0
  52. package/generator/src/SharedTemplate.elm +4 -5
  53. package/generator/src/SiteConfig.elm +3 -9
  54. package/generator/src/build.js +308 -95
  55. package/generator/src/cli.js +103 -8
  56. package/generator/src/codegen.js +192 -35
  57. package/generator/src/compile-elm.js +183 -31
  58. package/generator/src/dev-server.js +353 -96
  59. package/generator/src/elm-application.json +3 -1
  60. package/generator/src/elm-codegen.js +34 -0
  61. package/generator/src/elm-file-constants.js +2 -0
  62. package/generator/src/error-formatter.js +20 -1
  63. package/generator/src/generate-template-module-connector.js +125 -927
  64. package/generator/src/hello.ts +5 -0
  65. package/generator/src/pre-render-html.js +58 -104
  66. package/generator/src/render-worker.js +27 -13
  67. package/generator/src/render.js +252 -197
  68. package/generator/src/request-cache-fs.js +18 -0
  69. package/generator/src/request-cache.js +128 -56
  70. package/generator/src/rewrite-client-elm-json.js +49 -0
  71. package/generator/src/route-codegen-helpers.js +62 -1
  72. package/generator/static-code/dev-style.css +22 -0
  73. package/generator/static-code/elm-pages.js +43 -39
  74. package/generator/static-code/hmr.js +98 -88
  75. package/generator/template/app/Api.elm +25 -0
  76. package/generator/template/app/ErrorPage.elm +38 -0
  77. package/generator/template/app/Route/Index.elm +87 -0
  78. package/generator/template/{src → app}/Shared.elm +34 -13
  79. package/generator/template/app/Site.elm +19 -0
  80. package/generator/template/{src → app}/View.elm +0 -0
  81. package/generator/template/elm-pages.config.mjs +5 -0
  82. package/generator/template/elm.json +1 -0
  83. package/generator/template/{public/index.js → index.ts} +7 -3
  84. package/generator/template/package.json +4 -4
  85. package/generator/template/public/favicon.ico +0 -0
  86. package/generator/template/public/images/icon-png.png +0 -0
  87. package/generator/template/src/.gitkeep +0 -0
  88. package/generator/template/style.css +4 -0
  89. package/package.json +33 -23
  90. package/src/ApiRoute.elm +176 -43
  91. package/src/BuildError.elm +10 -1
  92. package/src/CookieParser.elm +84 -0
  93. package/src/DataSource/Env.elm +38 -0
  94. package/src/DataSource/File.elm +27 -16
  95. package/src/DataSource/Glob.elm +126 -80
  96. package/src/DataSource/Http.elm +283 -304
  97. package/src/DataSource/Internal/Glob.elm +5 -21
  98. package/src/DataSource/Internal/Request.elm +25 -0
  99. package/src/DataSource/Port.elm +17 -14
  100. package/src/DataSource.elm +55 -318
  101. package/src/Form/Field.elm +717 -0
  102. package/src/Form/FieldStatus.elm +36 -0
  103. package/src/Form/FieldView.elm +417 -0
  104. package/src/Form/FormData.elm +22 -0
  105. package/src/Form/Validation.elm +391 -0
  106. package/src/Form/Value.elm +118 -0
  107. package/src/Form.elm +1683 -0
  108. package/src/FormData.elm +58 -0
  109. package/src/FormDecoder.elm +102 -0
  110. package/src/Head/Seo.elm +12 -4
  111. package/src/Head.elm +12 -2
  112. package/src/HtmlPrinter.elm +1 -1
  113. package/src/Internal/ApiRoute.elm +17 -4
  114. package/src/Internal/Request.elm +7 -0
  115. package/src/PageServerResponse.elm +68 -0
  116. package/src/Pages/ContentCache.elm +1 -229
  117. package/src/Pages/Fetcher.elm +58 -0
  118. package/src/Pages/FormState.elm +256 -0
  119. package/src/Pages/Generate.elm +800 -0
  120. package/src/Pages/Internal/Form.elm +17 -0
  121. package/src/Pages/Internal/NotFoundReason.elm +3 -55
  122. package/src/Pages/Internal/Platform/Cli.elm +777 -579
  123. package/src/Pages/Internal/Platform/Effect.elm +5 -5
  124. package/src/Pages/Internal/Platform/StaticResponses.elm +178 -394
  125. package/src/Pages/Internal/Platform/ToJsPayload.elm +24 -23
  126. package/src/Pages/Internal/Platform.elm +1244 -504
  127. package/src/Pages/Internal/ResponseSketch.elm +19 -0
  128. package/src/Pages/Internal/RoutePattern.elm +596 -45
  129. package/src/Pages/Manifest.elm +26 -0
  130. package/src/Pages/Msg.elm +79 -0
  131. package/src/Pages/ProgramConfig.elm +67 -14
  132. package/src/Pages/SiteConfig.elm +3 -6
  133. package/src/Pages/StaticHttp/Request.elm +4 -2
  134. package/src/Pages/StaticHttpRequest.elm +50 -215
  135. package/src/Pages/Transition.elm +70 -0
  136. package/src/Path.elm +1 -0
  137. package/src/Pattern.elm +98 -0
  138. package/src/RenderRequest.elm +2 -2
  139. package/src/RequestsAndPending.elm +111 -9
  140. package/src/Server/Request.elm +1253 -0
  141. package/src/Server/Response.elm +292 -0
  142. package/src/Server/Session.elm +316 -0
  143. package/src/Server/SetCookie.elm +169 -0
  144. package/src/TerminalText.elm +1 -1
  145. package/src/Test/Html/Internal/ElmHtml/Markdown.elm +0 -1
  146. package/src/Test/Html/Internal/ElmHtml/ToString.elm +1 -1
  147. package/generator/src/Page.elm +0 -359
  148. package/generator/src/codegen-template-module.js +0 -183
  149. package/generator/src/elm-pages-js-minified.js +0 -1
  150. package/generator/template/src/Api.elm +0 -14
  151. package/generator/template/src/Page/Index.elm +0 -69
  152. package/generator/template/src/Site.elm +0 -41
  153. package/src/DataSource/ServerRequest.elm +0 -60
  154. package/src/Internal/OptimizedDecoder.elm +0 -18
  155. package/src/KeepOrDiscard.elm +0 -6
  156. package/src/OptimizedDecoder/Pipeline.elm +0 -335
  157. package/src/OptimizedDecoder.elm +0 -818
  158. package/src/Pages/Internal/ApplicationType.elm +0 -6
  159. package/src/Pages/Secrets.elm +0 -83
  160. package/src/Secrets.elm +0 -111
  161. package/src/SecretsDict.elm +0 -45
@@ -0,0 +1,420 @@
1
+ module RouteBuilder exposing
2
+ ( StatelessRoute, buildNoState
3
+ , StaticPayload
4
+ , withOnAction
5
+ , buildWithLocalState, buildWithSharedState
6
+ , preRender, single
7
+ , preRenderWithFallback, serverRender
8
+ , Builder(..)
9
+ , StatefulRoute
10
+ )
11
+
12
+ {-|
13
+
14
+
15
+ ## Stateless Route Modules
16
+
17
+ The simplest Route Module you can build is one with no state. It still can use `DataSource`'s, but it has no `init`, `update`, or `subscriptions`.
18
+
19
+ It can read the `Shared.Model`, but it cannot send `Shared.Msg`'s to update the `Shared.Model`. If you need a `Model`, use `buildWithLocalState`.
20
+
21
+ If you need to _change_ Shared state, use `buildWithSharedState`.
22
+
23
+ @docs StatelessRoute, buildNoState
24
+
25
+
26
+ ## Accessing Static Data
27
+
28
+ With `elm-pages`, you can have HTTP data available before a page is loaded, or read in a file, etc, using the DataSource API. Since the data
29
+ is available when the page is pre-rendered (as well as in the hydrated page), this is called Static Data.
30
+
31
+ An example of dynamic data would be keyboard input from the user, query params, or any other data that comes from the app running in the browser.
32
+
33
+ We have the following data during pre-render:
34
+
35
+ - `path` - the current path is static. In other words, we know the current path when we build an elm-pages site. Note that we **do not** know query parameters, fragments, etc. That is dynamic data. Pre-rendering occurs for paths in our app, but we don't know what possible query paremters might be used when those paths are hit.
36
+ - `data` - this will be the resolved `DataSource` for our page.
37
+ - `sharedData` - we can access any shared data between pages. For example, you may have fetched the name of a blog ("Jane's Blog") from the API for a Content Management System (CMS).
38
+ - `routeParams` - this is the record that includes any Dynamic Route Segments for the given page (or an empty record if there are none)
39
+
40
+ @docs StaticPayload
41
+
42
+ @docs withOnAction
43
+
44
+
45
+ ## Stateful Route Modules
46
+
47
+ @docs buildWithLocalState, buildWithSharedState
48
+
49
+
50
+ ## Pre-Rendered Routes
51
+
52
+ A `single` page is just a Route that has no Dynamic Route Segments. For example, `Route.About` will have `type alias RouteParams = {}`, whereas `Route.Blog.Slug_` has a Dynamic Segment slug, and `type alias RouteParams = { slug : String }`.
53
+
54
+ When you run `elm-pages add About`, it will use `RouteBuilder.single { ... }` because it has empty `RouteParams`. When you run `elm-pages add Blog.Slug_`, will will use `RouteBuilder.preRender` because it has a Dynamic Route Segment.
55
+
56
+ So `RouteBuilder.single` is just a simplified version of `RouteBuilder.preRender`. If there are no Dynamic Route Segments, then you don't need to define which pages to render so `RouteBuilder.single` doesn't need a `pages` field.
57
+
58
+ When there are Dynamic Route Segments, you need to tell `elm-pages` which pages to render. For example:
59
+
60
+ page =
61
+ RouteBuilder.preRender
62
+ { data = data
63
+ , pages = pages
64
+ , head = head
65
+ }
66
+
67
+ pages =
68
+ DataSource.succeed
69
+ [ { slug = "blog-post1" }
70
+ , { slug = "blog-post2" }
71
+ ]
72
+
73
+ @docs preRender, single
74
+
75
+
76
+ ## Rendering on the Server
77
+
78
+ @docs preRenderWithFallback, serverRender
79
+
80
+
81
+ ## Internals
82
+
83
+ @docs Builder
84
+ @docs StatefulRoute
85
+
86
+ -}
87
+
88
+ import Bytes exposing (Bytes)
89
+ import DataSource exposing (DataSource)
90
+ import DataSource.Http
91
+ import Dict exposing (Dict)
92
+ import Effect exposing (Effect)
93
+ import ErrorPage exposing (ErrorPage)
94
+ import Head
95
+ import Http
96
+ import Pages.Fetcher
97
+ import Pages.FormState
98
+ import Pages.Internal.NotFoundReason exposing (NotFoundReason)
99
+ import Pages.Internal.RoutePattern exposing (RoutePattern)
100
+ import Pages.Msg
101
+ import Pages.PageUrl exposing (PageUrl)
102
+ import Pages.Transition
103
+ import Path exposing (Path)
104
+ import Server.Request
105
+ import Server.Response
106
+ import Shared
107
+ import View exposing (View)
108
+
109
+
110
+ {-| -}
111
+ type alias StatefulRoute routeParams data action model msg =
112
+ { data : routeParams -> DataSource (Server.Response.Response data ErrorPage)
113
+ , action : routeParams -> DataSource (Server.Response.Response action ErrorPage)
114
+ , staticRoutes : DataSource (List routeParams)
115
+ , view :
116
+ Maybe PageUrl
117
+ -> Shared.Model
118
+ -> model
119
+ -> StaticPayload data action routeParams
120
+ -> View (Pages.Msg.Msg msg)
121
+ , head :
122
+ StaticPayload data action routeParams
123
+ -> List Head.Tag
124
+ , init : Maybe PageUrl -> Shared.Model -> StaticPayload data action routeParams -> ( model, Effect msg )
125
+ , update : PageUrl -> StaticPayload data action routeParams -> msg -> model -> Shared.Model -> ( model, Effect msg, Maybe Shared.Msg )
126
+ , subscriptions : Maybe PageUrl -> routeParams -> Path -> model -> Shared.Model -> Sub msg
127
+ , handleRoute : { moduleName : List String, routePattern : RoutePattern } -> (routeParams -> List ( String, String )) -> routeParams -> DataSource (Maybe NotFoundReason)
128
+ , kind : String
129
+ , onAction : Maybe (action -> msg)
130
+ }
131
+
132
+
133
+ {-| -}
134
+ type alias StatelessRoute routeParams data action =
135
+ StatefulRoute routeParams data action {} ()
136
+
137
+
138
+ {-| -}
139
+ type alias StaticPayload data action routeParams =
140
+ { data : data
141
+ , sharedData : Shared.Data
142
+ , routeParams : routeParams
143
+ , path : Path
144
+ , action : Maybe action
145
+ , submit :
146
+ { fields : List ( String, String ), headers : List ( String, String ) }
147
+ -> Pages.Fetcher.Fetcher (Result Http.Error action)
148
+ , transition : Maybe Pages.Transition.Transition
149
+ , fetchers : Dict String (Pages.Transition.FetcherState (Maybe action))
150
+ , pageFormState : Pages.FormState.PageFormState
151
+ }
152
+
153
+
154
+ {-| -}
155
+ type Builder routeParams data action
156
+ = WithData
157
+ { data : routeParams -> DataSource (Server.Response.Response data ErrorPage)
158
+ , action : routeParams -> DataSource (Server.Response.Response action ErrorPage)
159
+ , staticRoutes : DataSource (List routeParams)
160
+ , head :
161
+ StaticPayload data action routeParams
162
+ -> List Head.Tag
163
+ , serverless : Bool
164
+ , handleRoute :
165
+ { moduleName : List String, routePattern : RoutePattern }
166
+ -> (routeParams -> List ( String, String ))
167
+ -> routeParams
168
+ -> DataSource (Maybe NotFoundReason)
169
+ , kind : String
170
+ }
171
+
172
+
173
+ {-| -}
174
+ buildNoState :
175
+ { view :
176
+ Maybe PageUrl
177
+ -> Shared.Model
178
+ -> StaticPayload data action routeParams
179
+ -> View (Pages.Msg.Msg ())
180
+ }
181
+ -> Builder routeParams data action
182
+ -> StatefulRoute routeParams data action {} ()
183
+ buildNoState { view } builderState =
184
+ case builderState of
185
+ WithData record ->
186
+ { view = \maybePageUrl sharedModel _ -> view maybePageUrl sharedModel
187
+ , head = record.head
188
+ , data = record.data
189
+ , action = record.action
190
+ , staticRoutes = record.staticRoutes
191
+ , init = \_ _ _ -> ( {}, Effect.none )
192
+ , update = \_ _ _ _ _ -> ( {}, Effect.none, Nothing )
193
+ , subscriptions = \_ _ _ _ _ -> Sub.none
194
+ , handleRoute = record.handleRoute
195
+ , kind = record.kind
196
+ , onAction = Nothing
197
+ }
198
+
199
+
200
+ {-| -}
201
+ withOnAction : (action -> msg) -> StatefulRoute routeParams data action model msg -> StatefulRoute routeParams data action model msg
202
+ withOnAction toMsg config =
203
+ { config
204
+ | onAction = Just toMsg
205
+ }
206
+
207
+
208
+ {-| -}
209
+ buildWithLocalState :
210
+ { view :
211
+ Maybe PageUrl
212
+ -> Shared.Model
213
+ -> model
214
+ -> StaticPayload data action routeParams
215
+ -> View (Pages.Msg.Msg msg)
216
+ , init : Maybe PageUrl -> Shared.Model -> StaticPayload data action routeParams -> ( model, Effect msg )
217
+ , update : PageUrl -> Shared.Model -> StaticPayload data action routeParams -> msg -> model -> ( model, Effect msg )
218
+ , subscriptions : Maybe PageUrl -> routeParams -> Path -> Shared.Model -> model -> Sub msg
219
+ }
220
+ -> Builder routeParams data action
221
+ -> StatefulRoute routeParams data action model msg
222
+ buildWithLocalState config builderState =
223
+ case builderState of
224
+ WithData record ->
225
+ { view =
226
+ \model sharedModel staticPayload ->
227
+ config.view model sharedModel staticPayload
228
+ , head = record.head
229
+ , data = record.data
230
+ , action = record.action
231
+ , staticRoutes = record.staticRoutes
232
+ , init = config.init
233
+ , update =
234
+ \pageUrl staticPayload msg model sharedModel ->
235
+ let
236
+ ( updatedModel, cmd ) =
237
+ config.update
238
+ pageUrl
239
+ sharedModel
240
+ staticPayload
241
+ msg
242
+ model
243
+ in
244
+ ( updatedModel, cmd, Nothing )
245
+ , subscriptions =
246
+ \maybePageUrl routeParams path model sharedModel ->
247
+ config.subscriptions maybePageUrl routeParams path sharedModel model
248
+ , handleRoute = record.handleRoute
249
+ , kind = record.kind
250
+ , onAction = Nothing
251
+ }
252
+
253
+
254
+ {-| -}
255
+ buildWithSharedState :
256
+ { view :
257
+ Maybe PageUrl
258
+ -> Shared.Model
259
+ -> model
260
+ -> StaticPayload data action routeParams
261
+ -> View (Pages.Msg.Msg msg)
262
+ , init : Maybe PageUrl -> Shared.Model -> StaticPayload data action routeParams -> ( model, Effect msg )
263
+ , update : PageUrl -> Shared.Model -> StaticPayload data action routeParams -> msg -> model -> ( model, Effect msg, Maybe Shared.Msg )
264
+ , subscriptions : Maybe PageUrl -> routeParams -> Path -> Shared.Model -> model -> Sub msg
265
+ }
266
+ -> Builder routeParams data action
267
+ -> StatefulRoute routeParams data action model msg
268
+ buildWithSharedState config builderState =
269
+ case builderState of
270
+ WithData record ->
271
+ { view = config.view
272
+ , head = record.head
273
+ , data = record.data
274
+ , action = record.action
275
+ , staticRoutes = record.staticRoutes
276
+ , init = config.init
277
+ , update =
278
+ \pageUrl staticPayload msg model sharedModel ->
279
+ config.update pageUrl
280
+ sharedModel
281
+ staticPayload
282
+ msg
283
+ model
284
+ , subscriptions =
285
+ \maybePageUrl routeParams path model sharedModel ->
286
+ config.subscriptions maybePageUrl routeParams path sharedModel model
287
+ , handleRoute = record.handleRoute
288
+ , kind = record.kind
289
+ , onAction = Nothing
290
+ }
291
+
292
+
293
+ {-| -}
294
+ single :
295
+ { data : DataSource data
296
+ , head : StaticPayload data action {} -> List Head.Tag
297
+ }
298
+ -> Builder {} data action
299
+ single { data, head } =
300
+ WithData
301
+ { data = \_ -> data |> DataSource.map Server.Response.render
302
+ , action = \_ -> DataSource.fail "Internal Error - actions should never be called for statically generated pages."
303
+ , staticRoutes = DataSource.succeed [ {} ]
304
+ , head = head
305
+ , serverless = False
306
+ , handleRoute = \_ _ _ -> DataSource.succeed Nothing
307
+ , kind = "static"
308
+ }
309
+
310
+
311
+ {-| -}
312
+ preRender :
313
+ { data : routeParams -> DataSource data
314
+ , pages : DataSource (List routeParams)
315
+ , head : StaticPayload data action routeParams -> List Head.Tag
316
+ }
317
+ -> Builder routeParams data action
318
+ preRender { data, head, pages } =
319
+ WithData
320
+ { data = data >> DataSource.map Server.Response.render
321
+ , action = \_ -> DataSource.fail "Internal Error - actions should never be called for statically generated pages."
322
+ , staticRoutes = pages
323
+ , head = head
324
+ , serverless = False
325
+ , handleRoute =
326
+ \moduleContext toRecord routeParams ->
327
+ pages
328
+ |> DataSource.map
329
+ (\allRoutes ->
330
+ if allRoutes |> List.member routeParams then
331
+ Nothing
332
+
333
+ else
334
+ -- TODO pass in toString function, and use a custom one to avoid Debug.toString
335
+ Just <|
336
+ Pages.Internal.NotFoundReason.NotPrerendered
337
+ { moduleName = moduleContext.moduleName
338
+ , routePattern = moduleContext.routePattern
339
+ , matchedRouteParams = toRecord routeParams
340
+ }
341
+ (allRoutes
342
+ |> List.map toRecord
343
+ )
344
+ )
345
+ , kind = "prerender"
346
+ }
347
+
348
+
349
+ {-| -}
350
+ preRenderWithFallback :
351
+ { data : routeParams -> DataSource (Server.Response.Response data ErrorPage)
352
+ , pages : DataSource (List routeParams)
353
+ , head : StaticPayload data action routeParams -> List Head.Tag
354
+ }
355
+ -> Builder routeParams data action
356
+ preRenderWithFallback { data, head, pages } =
357
+ WithData
358
+ { data = data
359
+ , action = \_ -> DataSource.fail "Internal Error - actions should never be called for statically generated pages."
360
+ , staticRoutes = pages
361
+ , head = head
362
+ , serverless = False
363
+ , handleRoute =
364
+ \moduleContext toRecord routeParams ->
365
+ DataSource.succeed Nothing
366
+ , kind = "prerender-with-fallback"
367
+ }
368
+
369
+
370
+ {-| -}
371
+ serverRender :
372
+ { data : routeParams -> Server.Request.Parser (DataSource (Server.Response.Response data ErrorPage))
373
+ , action : routeParams -> Server.Request.Parser (DataSource (Server.Response.Response action ErrorPage))
374
+ , head : StaticPayload data action routeParams -> List Head.Tag
375
+ }
376
+ -> Builder routeParams data action
377
+ serverRender { data, action, head } =
378
+ WithData
379
+ { data =
380
+ \routeParams ->
381
+ DataSource.Http.get
382
+ "$$elm-pages$$headers"
383
+ (routeParams
384
+ |> data
385
+ |> Server.Request.getDecoder
386
+ )
387
+ |> DataSource.andThen
388
+ (\rendered ->
389
+ case rendered of
390
+ Ok okRendered ->
391
+ okRendered
392
+
393
+ Err error ->
394
+ Server.Request.errorsToString error |> DataSource.fail
395
+ )
396
+ , action =
397
+ \routeParams ->
398
+ DataSource.Http.get
399
+ "$$elm-pages$$headers"
400
+ (routeParams
401
+ |> action
402
+ |> Server.Request.getDecoder
403
+ )
404
+ |> DataSource.andThen
405
+ (\rendered ->
406
+ case rendered of
407
+ Ok okRendered ->
408
+ okRendered
409
+
410
+ Err error ->
411
+ Server.Request.errorsToString error |> DataSource.fail
412
+ )
413
+ , staticRoutes = DataSource.succeed []
414
+ , head = head
415
+ , serverless = True
416
+ , handleRoute =
417
+ \moduleContext toRecord routeParams ->
418
+ DataSource.succeed Nothing
419
+ , kind = "serverless"
420
+ }
@@ -1,7 +1,7 @@
1
1
  module SharedTemplate exposing (SharedTemplate)
2
2
 
3
- import Browser.Navigation
4
3
  import DataSource
4
+ import Effect exposing (Effect)
5
5
  import Html exposing (Html)
6
6
  import Pages.Flags exposing (Flags)
7
7
  import Pages.PageUrl exposing (PageUrl)
@@ -12,8 +12,7 @@ import View exposing (View)
12
12
 
13
13
  type alias SharedTemplate msg sharedModel sharedData mappedMsg =
14
14
  { init :
15
- Maybe Browser.Navigation.Key
16
- -> Flags
15
+ Flags
17
16
  ->
18
17
  Maybe
19
18
  { path :
@@ -24,8 +23,8 @@ type alias SharedTemplate msg sharedModel sharedData mappedMsg =
24
23
  , metadata : Maybe Route
25
24
  , pageUrl : Maybe PageUrl
26
25
  }
27
- -> ( sharedModel, Cmd msg )
28
- , update : msg -> sharedModel -> ( sharedModel, Cmd msg )
26
+ -> ( sharedModel, Effect msg )
27
+ , update : msg -> sharedModel -> ( sharedModel, Effect msg )
29
28
  , view :
30
29
  sharedData
31
30
  ->
@@ -2,15 +2,9 @@ module SiteConfig exposing (SiteConfig)
2
2
 
3
3
  import DataSource exposing (DataSource)
4
4
  import Head
5
- import Pages.Manifest
6
- import Route exposing (Route)
7
5
 
8
6
 
9
- type alias SiteConfig data =
10
- { data : DataSource data
11
- , canonicalUrl : String
12
- , manifest : data -> Pages.Manifest.Config
13
- , head :
14
- data
15
- -> List Head.Tag
7
+ type alias SiteConfig =
8
+ { canonicalUrl : String
9
+ , head : DataSource (List Head.Tag)
16
10
  }