elm-pages 3.0.0-beta.2 → 3.0.0-beta.20

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 (109) hide show
  1. package/README.md +10 -1
  2. package/codegen/{elm-pages-codegen.js → elm-pages-codegen.cjs} +2420 -1592
  3. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
  4. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +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/d.dat +0 -0
  7. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  8. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  9. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm.json +1 -1
  10. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1326 -121
  11. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +15215 -13007
  12. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  13. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +1 -1
  14. package/generator/dead-code-review/elm.json +8 -6
  15. package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +189 -17
  16. package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +255 -21
  17. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  18. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  19. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  20. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -1
  21. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1326 -121
  22. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +14620 -12636
  23. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  24. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +1 -1
  25. package/generator/review/elm.json +8 -8
  26. package/generator/src/RouteBuilder.elm +66 -52
  27. package/generator/src/SharedTemplate.elm +3 -2
  28. package/generator/src/SiteConfig.elm +3 -2
  29. package/generator/src/basepath-middleware.js +3 -3
  30. package/generator/src/build.js +122 -86
  31. package/generator/src/cli.js +247 -51
  32. package/generator/src/codegen.js +29 -27
  33. package/generator/src/compatibility-key.js +1 -0
  34. package/generator/src/compile-elm.js +20 -22
  35. package/generator/src/config.js +39 -0
  36. package/generator/src/copy-dir.js +2 -2
  37. package/generator/src/dev-server.js +119 -110
  38. package/generator/src/dir-helpers.js +9 -26
  39. package/generator/src/elm-codegen.js +5 -4
  40. package/generator/src/elm-file-constants.js +2 -3
  41. package/generator/src/error-formatter.js +12 -11
  42. package/generator/src/file-helpers.js +3 -4
  43. package/generator/src/generate-template-module-connector.js +14 -21
  44. package/generator/src/init.js +8 -7
  45. package/generator/src/pre-render-html.js +41 -28
  46. package/generator/src/render-test.js +109 -0
  47. package/generator/src/render-worker.js +26 -28
  48. package/generator/src/render.js +322 -142
  49. package/generator/src/request-cache.js +200 -162
  50. package/generator/src/rewrite-client-elm-json.js +5 -5
  51. package/generator/src/rewrite-elm-json.js +7 -7
  52. package/generator/src/route-codegen-helpers.js +16 -31
  53. package/generator/src/seo-renderer.js +12 -7
  54. package/generator/src/vite-utils.js +77 -0
  55. package/generator/static-code/hmr.js +16 -2
  56. package/generator/template/app/Api.elm +3 -3
  57. package/generator/template/app/Route/Index.elm +3 -3
  58. package/generator/template/app/Shared.elm +3 -3
  59. package/generator/template/app/Site.elm +9 -4
  60. package/package.json +21 -21
  61. package/src/ApiRoute.elm +199 -61
  62. package/src/BackendTask/Custom.elm +214 -0
  63. package/src/BackendTask/Env.elm +90 -0
  64. package/src/{DataSource → BackendTask}/File.elm +128 -43
  65. package/src/{DataSource → BackendTask}/Glob.elm +136 -125
  66. package/src/BackendTask/Http.elm +673 -0
  67. package/src/{DataSource → BackendTask}/Internal/Glob.elm +1 -1
  68. package/src/BackendTask/Internal/Request.elm +28 -0
  69. package/src/BackendTask/Random.elm +79 -0
  70. package/src/BackendTask/Time.elm +47 -0
  71. package/src/BackendTask.elm +537 -0
  72. package/src/FatalError.elm +89 -0
  73. package/src/Form/Field.elm +1 -1
  74. package/src/Form.elm +72 -92
  75. package/src/Head/Seo.elm +4 -4
  76. package/src/Head.elm +237 -7
  77. package/src/HtmlPrinter.elm +7 -3
  78. package/src/Internal/ApiRoute.elm +7 -5
  79. package/src/PageServerResponse.elm +6 -1
  80. package/src/Pages/Generate.elm +775 -132
  81. package/src/Pages/GeneratorProgramConfig.elm +15 -0
  82. package/src/Pages/Internal/FatalError.elm +5 -0
  83. package/src/Pages/Internal/Form.elm +21 -1
  84. package/src/Pages/Internal/Platform/Cli.elm +479 -747
  85. package/src/Pages/Internal/Platform/Cli.elm.bak +1276 -0
  86. package/src/Pages/Internal/Platform/CompatibilityKey.elm +6 -0
  87. package/src/Pages/Internal/Platform/Effect.elm +1 -2
  88. package/src/Pages/Internal/Platform/GeneratorApplication.elm +373 -0
  89. package/src/Pages/Internal/Platform/StaticResponses.elm +73 -270
  90. package/src/Pages/Internal/Platform/ToJsPayload.elm +4 -7
  91. package/src/Pages/Internal/Platform.elm +54 -53
  92. package/src/Pages/Internal/Script.elm +17 -0
  93. package/src/Pages/Internal/StaticHttpBody.elm +35 -1
  94. package/src/Pages/Manifest.elm +29 -4
  95. package/src/Pages/ProgramConfig.elm +12 -8
  96. package/src/Pages/Script.elm +109 -0
  97. package/src/Pages/SiteConfig.elm +3 -2
  98. package/src/Pages/StaticHttp/Request.elm +2 -2
  99. package/src/Pages/StaticHttpRequest.elm +23 -98
  100. package/src/RequestsAndPending.elm +8 -19
  101. package/src/Result/Extra.elm +21 -0
  102. package/src/Server/Request.elm +43 -34
  103. package/src/Server/Session.elm +166 -100
  104. package/src/Server/SetCookie.elm +89 -31
  105. package/src/DataSource/Env.elm +0 -38
  106. package/src/DataSource/Http.elm +0 -446
  107. package/src/DataSource/Internal/Request.elm +0 -20
  108. package/src/DataSource/Port.elm +0 -90
  109. package/src/DataSource.elm +0 -538
@@ -1,8 +1,37 @@
1
- module Pages.Generate exposing (Type(..), serverRender, buildWithLocalState, buildNoState, Builder)
1
+ module Pages.Generate exposing
2
+ ( buildWithLocalState, buildWithSharedState, buildNoState, Builder
3
+ , Type(..)
4
+ , serverRender
5
+ , preRender, single
6
+ , addDeclarations
7
+ )
2
8
 
3
- {-|
9
+ {-| This module provides some functions for scaffolding code for a new Route Module. It uses [`elm-codegen`'s API](https://package.elm-lang.org/packages/mdgriffith/elm-codegen/latest/) for generating code.
4
10
 
5
- @docs Type, serverRender, buildWithLocalState, buildNoState, Builder
11
+ Typically you'll want to use this via the `elm-pages codegen` CLI command. The default starter template includes a file that uses these functions, which you can tweak to customize your scaffolding commands.
12
+ Learn more about [the `elm-pages run` CLI command in its docs page](https://elm-pages.com/docs/run-command).
13
+
14
+
15
+ ## Initializing the Generator Builder
16
+
17
+ @docs buildWithLocalState, buildWithSharedState, buildNoState, Builder
18
+
19
+ @docs Type
20
+
21
+
22
+ ## Generating Server-Rendered Pages
23
+
24
+ @docs serverRender
25
+
26
+
27
+ ## Generating pre-rendered pages
28
+
29
+ @docs preRender, single
30
+
31
+
32
+ ## Including Additional elm-codegen Declarations
33
+
34
+ @docs addDeclarations
6
35
 
7
36
  -}
8
37
 
@@ -30,12 +59,20 @@ typeToDeclaration name type_ =
30
59
 
31
60
  {-| -}
32
61
  type Builder
33
- = Builder
62
+ = ServerRender
63
+ (List Elm.Declaration)
34
64
  { data : ( Type, Elm.Expression -> Elm.Expression )
35
65
  , action : ( Type, Elm.Expression -> Elm.Expression )
36
66
  , head : Elm.Expression -> Elm.Expression
37
67
  , moduleName : List String
38
68
  }
69
+ | PreRender
70
+ (List Elm.Declaration)
71
+ { data : ( Type, Elm.Expression -> Elm.Expression )
72
+ , pages : Maybe Elm.Expression
73
+ , head : Elm.Expression -> Elm.Expression
74
+ , moduleName : List String
75
+ }
39
76
 
40
77
 
41
78
  {-| -}
@@ -47,61 +84,409 @@ serverRender :
47
84
  }
48
85
  -> Builder
49
86
  serverRender =
50
- Builder
87
+ ServerRender []
88
+
89
+
90
+ {-| -}
91
+ preRender :
92
+ { data : ( Type, Elm.Expression -> Elm.Expression )
93
+ , pages : Elm.Expression
94
+ , head : Elm.Expression -> Elm.Expression
95
+ , moduleName : List String
96
+ }
97
+ -> Builder
98
+ preRender input =
99
+ --let
100
+ -- hasDynamicRouteSegments : Bool
101
+ -- hasDynamicRouteSegments =
102
+ -- RoutePattern.fromModuleName input.moduleName
103
+ -- -- TODO give error if not parseable here
104
+ -- |> Maybe.map RoutePattern.hasRouteParams
105
+ -- |> Maybe.withDefault False
106
+ --in
107
+ PreRender []
108
+ { data = input.data
109
+ , pages =
110
+ input.pages
111
+ |> Elm.withType
112
+ (throwableTask
113
+ (Elm.Annotation.list <| Elm.Annotation.named [] "RouteParams")
114
+ )
115
+ |> Just
116
+ , head = input.head
117
+ , moduleName = input.moduleName
118
+ }
119
+
120
+
121
+ {-| -}
122
+ single :
123
+ { data : ( Type, Elm.Expression )
124
+ , head : Elm.Expression -> Elm.Expression
125
+ , moduleName : List String
126
+ }
127
+ -> Builder
128
+ single input =
129
+ PreRender []
130
+ { data = ( Tuple.first input.data, \_ -> Tuple.second input.data )
131
+ , pages = Nothing
132
+ , head = input.head
133
+ , moduleName = input.moduleName
134
+ }
51
135
 
52
136
 
53
137
  {-| -}
54
138
  buildNoState :
55
- { view : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
139
+ { view : { maybeUrl : Elm.Expression, sharedModel : Elm.Expression, app : Elm.Expression } -> Elm.Expression
56
140
  }
57
141
  -> Builder
58
142
  -> Elm.File
59
- buildNoState definitions (Builder builder) =
60
- userFunction builder.moduleName
61
- { view = \_ -> definitions.view
62
- , localState = Nothing
63
- , data = builder.data |> Tuple.second
64
- , action = builder.action |> Tuple.second
65
- , head = builder.head
66
- , types =
67
- { model = Alias (Elm.Annotation.record [])
68
- , msg = Alias Elm.Annotation.unit
69
- , data = builder.data |> Tuple.first
70
- , actionData = builder.action |> Tuple.first
71
- }
72
- }
143
+ buildNoState definitions builder_ =
144
+ case builder_ of
145
+ ServerRender declarations builder ->
146
+ userFunction builder.moduleName
147
+ { view =
148
+ \maybeUrl sharedModel _ app ->
149
+ definitions.view
150
+ { maybeUrl = maybeUrl
151
+ , sharedModel = sharedModel
152
+ , app = app
153
+ }
154
+ , localState = Nothing
155
+ , data = builder.data |> Tuple.second
156
+ , action = builder.action |> Tuple.second |> Action
157
+ , head = builder.head
158
+ , types =
159
+ { model = Alias (Elm.Annotation.record [])
160
+ , msg = Alias Elm.Annotation.unit
161
+ , data = builder.data |> Tuple.first
162
+ , actionData = builder.action |> Tuple.first
163
+ }
164
+ , declarations = declarations
165
+ }
166
+
167
+ PreRender declarations builder ->
168
+ userFunction builder.moduleName
169
+ { view =
170
+ \maybeUrl sharedModel _ app ->
171
+ definitions.view
172
+ { maybeUrl = maybeUrl
173
+ , sharedModel = sharedModel
174
+ , app = app
175
+ }
176
+ , localState = Nothing
177
+ , data = builder.data |> Tuple.second
178
+ , action = builder.pages |> Pages
179
+ , head = builder.head
180
+ , types =
181
+ { model = Alias (Elm.Annotation.record [])
182
+ , msg = Alias Elm.Annotation.unit
183
+ , data = builder.data |> Tuple.first
184
+ , actionData =
185
+ throwableTask
186
+ (Elm.Annotation.list (Elm.Annotation.named [] "RouteParams"))
187
+ |> Alias
188
+ }
189
+ , declarations = declarations
190
+ }
191
+
192
+
193
+ {-| -}
194
+ addDeclarations : List Elm.Declaration -> Builder -> Builder
195
+ addDeclarations declarations builder =
196
+ case builder of
197
+ ServerRender existingDeclarations record ->
198
+ ServerRender (existingDeclarations ++ declarations) record
199
+
200
+ PreRender existingDeclarations record ->
201
+ PreRender (existingDeclarations ++ declarations) record
73
202
 
74
203
 
75
204
  {-| -}
76
205
  buildWithLocalState :
77
- { view : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
78
- , update : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
79
- , init : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
80
- , subscriptions : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
206
+ { view :
207
+ { maybeUrl : Elm.Expression, sharedModel : Elm.Expression, model : Elm.Expression, app : Elm.Expression } -> Elm.Expression
208
+ , update :
209
+ { pageUrl : Elm.Expression
210
+ , sharedModel : Elm.Expression
211
+ , app : Elm.Expression
212
+ , msg : Elm.Expression
213
+ , model : Elm.Expression
214
+ }
215
+ -> Elm.Expression
216
+ , init :
217
+ { pageUrl : Elm.Expression
218
+ , sharedModel : Elm.Expression
219
+ , app : Elm.Expression
220
+ }
221
+ -> Elm.Expression
222
+ , subscriptions :
223
+ { maybePageUrl : Elm.Expression
224
+ , routeParams : Elm.Expression
225
+ , path : Elm.Expression
226
+ , sharedModel : Elm.Expression
227
+ , model : Elm.Expression
228
+ }
229
+ -> Elm.Expression
81
230
  , msg : Type
82
231
  , model : Type
83
232
  }
84
233
  -> Builder
85
234
  -> Elm.File
86
- buildWithLocalState definitions (Builder builder) =
87
- userFunction builder.moduleName
88
- { view = definitions.view
89
- , localState =
90
- Just
91
- { update = definitions.update
92
- , init = definitions.init
93
- , subscriptions = definitions.subscriptions
235
+ buildWithLocalState definitions builder_ =
236
+ case builder_ of
237
+ ServerRender declarations builder ->
238
+ userFunction builder.moduleName
239
+ { view =
240
+ \maybeUrl sharedModel model app ->
241
+ definitions.view
242
+ { maybeUrl = maybeUrl
243
+ , sharedModel = sharedModel
244
+ , model = model
245
+ , app = app
246
+ }
247
+ , localState =
248
+ Just
249
+ { update =
250
+ \pageUrl sharedModel app msg model ->
251
+ definitions.update
252
+ { pageUrl = pageUrl
253
+ , sharedModel = sharedModel
254
+ , app = app
255
+ , msg = msg
256
+ , model = model
257
+ }
258
+ , init =
259
+ \pageUrl sharedModel app ->
260
+ definitions.init
261
+ { pageUrl = pageUrl
262
+ , sharedModel = sharedModel
263
+ , app = app
264
+ }
265
+ , subscriptions =
266
+ \maybePageUrl routeParams path sharedModel model ->
267
+ definitions.subscriptions
268
+ { maybePageUrl = maybePageUrl
269
+ , routeParams = routeParams
270
+ , path = path
271
+ , sharedModel = sharedModel
272
+ , model = model
273
+ }
274
+ , state = LocalState
275
+ }
276
+ , data = builder.data |> Tuple.second
277
+ , action = builder.action |> Tuple.second |> Action
278
+ , head = builder.head
279
+ , types =
280
+ { model = definitions.model
281
+ , msg = definitions.msg
282
+ , data = builder.data |> Tuple.first
283
+ , actionData = builder.action |> Tuple.first
284
+ }
285
+ , declarations = declarations
94
286
  }
95
- , data = builder.data |> Tuple.second
96
- , action = builder.action |> Tuple.second
97
- , head = builder.head
98
- , types =
99
- { model = definitions.model
100
- , msg = definitions.msg
101
- , data = builder.data |> Tuple.first
102
- , actionData = builder.action |> Tuple.first
103
- }
287
+
288
+ PreRender declarations builder ->
289
+ userFunction builder.moduleName
290
+ { view =
291
+ \maybeUrl sharedModel model app ->
292
+ definitions.view
293
+ { maybeUrl = maybeUrl
294
+ , sharedModel = sharedModel
295
+ , model = model
296
+ , app = app
297
+ }
298
+ , localState =
299
+ Just
300
+ { update =
301
+ \pageUrl sharedModel app msg model ->
302
+ definitions.update
303
+ { pageUrl = pageUrl
304
+ , sharedModel = sharedModel
305
+ , app = app
306
+ , msg = msg
307
+ , model = model
308
+ }
309
+ , init =
310
+ \pageUrl sharedModel app ->
311
+ definitions.init
312
+ { pageUrl = pageUrl
313
+ , sharedModel = sharedModel
314
+ , app = app
315
+ }
316
+ , subscriptions =
317
+ \maybePageUrl routeParams path sharedModel model ->
318
+ definitions.subscriptions
319
+ { maybePageUrl = maybePageUrl
320
+ , routeParams = routeParams
321
+ , path = path
322
+ , sharedModel = sharedModel
323
+ , model = model
324
+ }
325
+ , state = LocalState
326
+ }
327
+ , data = builder.data |> Tuple.second
328
+ , action = builder.pages |> Pages
329
+ , head = builder.head
330
+ , types =
331
+ { model = definitions.model
332
+ , msg = definitions.msg
333
+ , data = builder.data |> Tuple.first
334
+ , actionData =
335
+ throwableTask
336
+ (Elm.Annotation.list (Elm.Annotation.named [] "RouteParams"))
337
+ |> Alias
338
+ }
339
+ , declarations = declarations
340
+ }
341
+
342
+
343
+ {-| -}
344
+ buildWithSharedState :
345
+ { view :
346
+ { maybeUrl : Elm.Expression, sharedModel : Elm.Expression, model : Elm.Expression, app : Elm.Expression } -> Elm.Expression
347
+ , update :
348
+ { pageUrl : Elm.Expression
349
+ , sharedModel : Elm.Expression
350
+ , app : Elm.Expression
351
+ , msg : Elm.Expression
352
+ , model : Elm.Expression
104
353
  }
354
+ -> Elm.Expression
355
+ , init :
356
+ { pageUrl : Elm.Expression
357
+ , sharedModel : Elm.Expression
358
+ , app : Elm.Expression
359
+ }
360
+ -> Elm.Expression
361
+ , subscriptions :
362
+ { maybePageUrl : Elm.Expression
363
+ , routeParams : Elm.Expression
364
+ , path : Elm.Expression
365
+ , sharedModel : Elm.Expression
366
+ , model : Elm.Expression
367
+ }
368
+ -> Elm.Expression
369
+ , msg : Type
370
+ , model : Type
371
+ }
372
+ -> Builder
373
+ -> Elm.File
374
+ buildWithSharedState definitions builder_ =
375
+ case builder_ of
376
+ ServerRender declarations builder ->
377
+ userFunction builder.moduleName
378
+ { view =
379
+ \maybeUrl sharedModel model app ->
380
+ definitions.view
381
+ { maybeUrl = maybeUrl
382
+ , sharedModel = sharedModel
383
+ , model = model
384
+ , app = app
385
+ }
386
+ , localState =
387
+ Just
388
+ { update =
389
+ \pageUrl sharedModel app msg model ->
390
+ definitions.update
391
+ { pageUrl = pageUrl
392
+ , sharedModel = sharedModel
393
+ , app = app
394
+ , msg = msg
395
+ , model = model
396
+ }
397
+ , init =
398
+ \pageUrl sharedModel app ->
399
+ definitions.init
400
+ { pageUrl = pageUrl
401
+ , sharedModel = sharedModel
402
+ , app = app
403
+ }
404
+ , subscriptions =
405
+ \maybePageUrl routeParams path sharedModel model ->
406
+ definitions.subscriptions
407
+ { maybePageUrl = maybePageUrl
408
+ , routeParams = routeParams
409
+ , path = path
410
+ , sharedModel = sharedModel
411
+ , model = model
412
+ }
413
+ , state = SharedState
414
+ }
415
+ , data = builder.data |> Tuple.second
416
+ , action = builder.action |> Tuple.second |> Action
417
+ , head = builder.head
418
+ , types =
419
+ { model = definitions.model
420
+ , msg = definitions.msg
421
+ , data = builder.data |> Tuple.first
422
+ , actionData = builder.action |> Tuple.first
423
+ }
424
+ , declarations = declarations
425
+ }
426
+
427
+ PreRender declarations builder ->
428
+ userFunction builder.moduleName
429
+ { view =
430
+ \maybeUrl sharedModel model app ->
431
+ definitions.view
432
+ { maybeUrl = maybeUrl
433
+ , sharedModel = sharedModel
434
+ , model = model
435
+ , app = app
436
+ }
437
+ , localState =
438
+ Just
439
+ { update =
440
+ \pageUrl sharedModel app msg model ->
441
+ definitions.update
442
+ { pageUrl = pageUrl
443
+ , sharedModel = sharedModel
444
+ , app = app
445
+ , msg = msg
446
+ , model = model
447
+ }
448
+ , init =
449
+ \pageUrl sharedModel app ->
450
+ definitions.init
451
+ { pageUrl = pageUrl
452
+ , sharedModel = sharedModel
453
+ , app = app
454
+ }
455
+ , subscriptions =
456
+ \maybePageUrl routeParams path sharedModel model ->
457
+ definitions.subscriptions
458
+ { maybePageUrl = maybePageUrl
459
+ , routeParams = routeParams
460
+ , path = path
461
+ , sharedModel = sharedModel
462
+ , model = model
463
+ }
464
+ , state = SharedState
465
+ }
466
+ , data = builder.data |> Tuple.second
467
+ , action = builder.pages |> Pages
468
+ , head = builder.head
469
+ , types =
470
+ { model = definitions.model
471
+ , msg = definitions.msg
472
+ , data = builder.data |> Tuple.first
473
+ , actionData =
474
+ throwableTask
475
+ (Elm.Annotation.list (Elm.Annotation.named [] "RouteParams"))
476
+ |> Alias
477
+ }
478
+ , declarations = declarations
479
+ }
480
+
481
+
482
+ type State
483
+ = SharedState
484
+ | LocalState
485
+
486
+
487
+ type ActionOrPages
488
+ = Action (Elm.Expression -> Elm.Expression)
489
+ | Pages (Maybe Elm.Expression)
105
490
 
106
491
 
107
492
  {-| -}
@@ -114,11 +499,13 @@ userFunction :
114
499
  { update : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
115
500
  , init : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
116
501
  , subscriptions : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
502
+ , state : State
117
503
  }
118
504
  , data : Elm.Expression -> Elm.Expression
119
- , action : Elm.Expression -> Elm.Expression
505
+ , action : ActionOrPages
120
506
  , head : Elm.Expression -> Elm.Expression
121
507
  , types : { model : Type, msg : Type, data : Type, actionData : Type }
508
+ , declarations : List Elm.Declaration
122
509
  }
123
510
  -> Elm.File
124
511
  userFunction moduleName definitions =
@@ -139,11 +526,22 @@ userFunction moduleName definitions =
139
526
  |> Just
140
527
  )
141
528
  ( "sharedModel"
142
- , Nothing
529
+ , Just (Elm.Annotation.named [ "Shared" ] "Model")
143
530
  )
144
531
  ( "model", Just (Elm.Annotation.named [] "Model") )
145
532
  ( "app", Just appType )
146
- definitions.view
533
+ (\maybeUrl sharedModel model app ->
534
+ definitions.view maybeUrl sharedModel model app
535
+ |> Elm.withType
536
+ (Elm.Annotation.namedWith [ "View" ]
537
+ "View"
538
+ [ Elm.Annotation.namedWith [ "Pages", "Msg" ]
539
+ "Msg"
540
+ [ localType "Msg"
541
+ ]
542
+ ]
543
+ )
544
+ )
147
545
 
148
546
  Nothing ->
149
547
  let
@@ -161,7 +559,7 @@ userFunction moduleName definitions =
161
559
  |> Just
162
560
  )
163
561
  ( "sharedModel"
164
- , Nothing
562
+ , Just (Elm.Annotation.named [ "Shared" ] "Model")
165
563
  )
166
564
  ( "app", Just appType )
167
565
  (definitions.view Elm.unit)
@@ -180,6 +578,7 @@ userFunction moduleName definitions =
180
578
  }
181
579
  , initFn : { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression }
182
580
  , subscriptionsFn : { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression }
581
+ , state : State
183
582
  }
184
583
  localDefinitions =
185
584
  definitions.localState
@@ -192,7 +591,7 @@ userFunction moduleName definitions =
192
591
  |> Elm.Annotation.named [ "Pages", "PageUrl" ]
193
592
  |> Just
194
593
  )
195
- ( "sharedModel", Nothing )
594
+ ( "sharedModel", Just (Elm.Annotation.named [ "Shared" ] "Model") )
196
595
  ( "app", Just appType )
197
596
  ( "msg", Just (Elm.Annotation.named [] "Msg") )
198
597
  ( "model", Just (Elm.Annotation.named [] "Model") )
@@ -205,9 +604,16 @@ userFunction moduleName definitions =
205
604
  |> Elm.Annotation.maybe
206
605
  |> Just
207
606
  )
208
- ( "sharedModel", Nothing )
607
+ ( "sharedModel", Just (Elm.Annotation.named [ "Shared" ] "Model") )
209
608
  ( "app", Just appType )
210
- localState.init
609
+ (\pageUrl sharedModel app ->
610
+ localState.init pageUrl sharedModel app
611
+ |> Elm.withType
612
+ (Elm.Annotation.tuple
613
+ (localType "Model")
614
+ effectType
615
+ )
616
+ )
211
617
  , subscriptionsFn =
212
618
  Elm.Declare.fn5
213
619
  "subscriptions"
@@ -217,33 +623,90 @@ userFunction moduleName definitions =
217
623
  |> Elm.Annotation.maybe
218
624
  |> Just
219
625
  )
220
- ( "routeParams", Nothing )
221
- ( "path", Nothing )
222
- ( "sharedModel", Nothing )
223
- ( "model", Nothing )
224
- localState.subscriptions
626
+ ( "routeParams", "RouteParams" |> Elm.Annotation.named [] |> Just )
627
+ ( "path", Elm.Annotation.namedWith [ "Path" ] "Path" [] |> Just )
628
+ ( "sharedModel", Just (Elm.Annotation.named [ "Shared" ] "Model") )
629
+ ( "model", localType "Model" |> Just )
630
+ (\maybePageUrl routeParams path sharedModel model ->
631
+ localState.subscriptions maybePageUrl routeParams path sharedModel model
632
+ |> Elm.withType (Elm.Annotation.namedWith [] "Sub" [ localType "Msg" ])
633
+ )
634
+ , state = localState.state
225
635
  }
226
636
  )
227
637
 
228
- dataFn : { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression }
638
+ dataFn : { declaration : Elm.Declaration, call : List Elm.Expression -> Elm.Expression, callFrom : List String -> List Elm.Expression -> Elm.Expression }
229
639
  dataFn =
230
- Elm.Declare.fn "data"
231
- ( "routeParams"
232
- , "RouteParams"
233
- |> Elm.Annotation.named []
234
- |> Just
235
- )
236
- (definitions.data >> Elm.withType (myType "Data"))
640
+ case definitions.action of
641
+ Pages Nothing ->
642
+ Elm.Declare.function "data"
643
+ []
644
+ (\_ ->
645
+ definitions.data Elm.unit
646
+ |> Elm.withType
647
+ (case definitions.action of
648
+ Pages _ ->
649
+ throwableTask (Elm.Annotation.named [] "Data")
237
650
 
238
- actionFn : { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression }
651
+ Action _ ->
652
+ myType "Data"
653
+ )
654
+ )
655
+
656
+ _ ->
657
+ Elm.Declare.function "data"
658
+ [ ( "routeParams"
659
+ , "RouteParams"
660
+ |> Elm.Annotation.named []
661
+ |> Just
662
+ )
663
+ ]
664
+ (\args ->
665
+ case args of
666
+ [ arg ] ->
667
+ definitions.data arg
668
+ |> Elm.withType
669
+ (case definitions.action of
670
+ Pages _ ->
671
+ throwableTask (Elm.Annotation.named [] "Data")
672
+
673
+ Action _ ->
674
+ myType "Data"
675
+ )
676
+
677
+ _ ->
678
+ Elm.unit
679
+ )
680
+
681
+ actionFn : Maybe { declaration : Elm.Declaration, call : List Elm.Expression -> Elm.Expression, callFrom : List String -> List Elm.Expression -> Elm.Expression }
239
682
  actionFn =
240
- Elm.Declare.fn "action"
241
- ( "routeParams"
242
- , "RouteParams"
243
- |> Elm.Annotation.named []
244
- |> Just
245
- )
246
- (definitions.action >> Elm.withType (myType "ActionData"))
683
+ case definitions.action of
684
+ Action action_ ->
685
+ Elm.Declare.function "action"
686
+ [ ( "routeParams"
687
+ , "RouteParams"
688
+ |> Elm.Annotation.named []
689
+ |> Just
690
+ )
691
+ ]
692
+ (\args ->
693
+ case args of
694
+ [ arg ] ->
695
+ action_ arg |> Elm.withType (myType "ActionData")
696
+
697
+ _ ->
698
+ Elm.unit
699
+ )
700
+ |> Just
701
+
702
+ Pages pages_ ->
703
+ pages_
704
+ |> Maybe.map
705
+ (\justPagesExpression ->
706
+ Elm.Declare.function "pages"
707
+ []
708
+ (\_ -> justPagesExpression)
709
+ )
247
710
 
248
711
  headFn : { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression }
249
712
  headFn =
@@ -257,8 +720,8 @@ userFunction moduleName definitions =
257
720
  )
258
721
  in
259
722
  Elm.file ("Route" :: moduleName)
260
- ([ definitions.types.model |> typeToDeclaration "Model"
261
- , definitions.types.msg |> typeToDeclaration "Msg"
723
+ ([ definitions.types.model |> typeToDeclaration "Model" |> Elm.expose
724
+ , definitions.types.msg |> typeToDeclaration "Msg" |> Elm.expose
262
725
  , Elm.alias "RouteParams"
263
726
  (Elm.Annotation.record
264
727
  (RoutePattern.fromModuleName moduleName
@@ -267,18 +730,51 @@ userFunction moduleName definitions =
267
730
  |> Maybe.withDefault []
268
731
  )
269
732
  )
733
+ |> Elm.expose
270
734
  , Elm.declaration "route"
271
- (serverRender_
272
- { action =
273
- \routeParams ->
274
- actionFn.call routeParams
275
- |> Elm.withType (myType "ActionData")
276
- , data =
277
- \routeParams ->
278
- dataFn.call routeParams
279
- |> Elm.withType (myType "Data")
280
- , head = headFn.call
281
- }
735
+ ((case definitions.action of
736
+ Action _ ->
737
+ serverRender_
738
+ { action =
739
+ \routeParams ->
740
+ actionFn
741
+ |> Maybe.map
742
+ (\justActionFn ->
743
+ justActionFn.call [ routeParams ]
744
+ |> Elm.withType (myType "ActionData")
745
+ )
746
+ |> Maybe.withDefault Elm.unit
747
+ , data =
748
+ \routeParams ->
749
+ dataFn.call [ routeParams ]
750
+ |> Elm.withType (myType "Data")
751
+ , head = headFn.call
752
+ }
753
+
754
+ Pages _ ->
755
+ case actionFn of
756
+ Nothing ->
757
+ single_
758
+ { data =
759
+ dataFn.call []
760
+ |> Elm.withType
761
+ (throwableTask
762
+ (Elm.Annotation.named [] "Data")
763
+ )
764
+ , head = headFn.call
765
+ }
766
+
767
+ Just justActionFn ->
768
+ preRender_
769
+ { pages = justActionFn.call []
770
+ , data =
771
+ \routeParams ->
772
+ dataFn.call [ routeParams ]
773
+ |> Elm.withType
774
+ (throwableTask (Elm.Annotation.named [] "Data"))
775
+ , head = headFn.call
776
+ }
777
+ )
282
778
  |> (case localDefinitions of
283
779
  Just local ->
284
780
  buildWithLocalState_
@@ -286,6 +782,7 @@ userFunction moduleName definitions =
286
782
  , update = local.updateFn.call
287
783
  , init = local.initFn.call
288
784
  , subscriptions = local.subscriptionsFn.call
785
+ , state = local.state
289
786
  }
290
787
  >> Elm.withType
291
788
  (Elm.Annotation.namedWith [ "RouteBuilder" ]
@@ -312,6 +809,7 @@ userFunction moduleName definitions =
312
809
  )
313
810
  )
314
811
  )
812
+ |> Elm.expose
315
813
  ]
316
814
  ++ (case localDefinitions of
317
815
  Just local ->
@@ -323,13 +821,17 @@ userFunction moduleName definitions =
323
821
  Nothing ->
324
822
  []
325
823
  )
326
- ++ [ definitions.types.data |> typeToDeclaration "Data"
327
- , definitions.types.actionData |> typeToDeclaration "ActionData"
824
+ ++ [ definitions.types.data |> typeToDeclaration "Data" |> Elm.expose
825
+ , definitions.types.actionData |> typeToDeclaration "ActionData" |> Elm.expose
328
826
  , dataFn.declaration
329
- , actionFn.declaration
330
827
  , headFn.declaration
331
828
  , viewFn.declaration
332
829
  ]
830
+ ++ ([ actionFn |> Maybe.map .declaration
831
+ ]
832
+ |> List.filterMap identity
833
+ )
834
+ ++ definitions.declarations
333
835
  )
334
836
 
335
837
 
@@ -342,14 +844,13 @@ myType : String -> Elm.Annotation.Annotation
342
844
  myType dataType =
343
845
  Elm.Annotation.namedWith [ "Server", "Request" ]
344
846
  "Parser"
345
- [ Elm.Annotation.namedWith [ "DataSource" ]
346
- "DataSource"
347
- [ Elm.Annotation.namedWith [ "Server", "Response" ]
847
+ [ throwableTask
848
+ (Elm.Annotation.namedWith [ "Server", "Response" ]
348
849
  "Response"
349
850
  [ Elm.Annotation.named [] dataType
350
851
  , Elm.Annotation.named [ "ErrorPage" ] "ErrorPage"
351
852
  ]
352
- ]
853
+ )
353
854
  ]
354
855
 
355
856
 
@@ -384,10 +885,8 @@ serverRender_ serverRenderArg =
384
885
  (Elm.Annotation.namedWith
385
886
  [ "Server", "Request" ]
386
887
  "Parser"
387
- [ Elm.Annotation.namedWith
388
- [ "DataSource" ]
389
- "DataSource"
390
- [ Elm.Annotation.namedWith
888
+ [ throwableTask
889
+ (Elm.Annotation.namedWith
391
890
  [ "Server", "Response" ]
392
891
  "Response"
393
892
  [ Elm.Annotation.var "data"
@@ -396,7 +895,7 @@ serverRender_ serverRenderArg =
396
895
  "ErrorPage"
397
896
  []
398
897
  ]
399
- ]
898
+ )
400
899
  ]
401
900
  )
402
901
  )
@@ -406,10 +905,8 @@ serverRender_ serverRenderArg =
406
905
  (Elm.Annotation.namedWith
407
906
  [ "Server", "Request" ]
408
907
  "Parser"
409
- [ Elm.Annotation.namedWith
410
- [ "DataSource" ]
411
- "DataSource"
412
- [ Elm.Annotation.namedWith
908
+ [ throwableTask
909
+ (Elm.Annotation.namedWith
413
910
  [ "Server", "Response" ]
414
911
  "Response"
415
912
  [ Elm.Annotation.var "action"
@@ -418,7 +915,7 @@ serverRender_ serverRenderArg =
418
915
  "ErrorPage"
419
916
  []
420
917
  ]
421
- ]
918
+ )
422
919
  ]
423
920
  )
424
921
  )
@@ -463,6 +960,116 @@ serverRender_ serverRenderArg =
463
960
  ]
464
961
 
465
962
 
963
+ preRender_ :
964
+ { data : Elm.Expression -> Elm.Expression
965
+ , pages : Elm.Expression
966
+ , head : Elm.Expression -> Elm.Expression
967
+ }
968
+ -> Elm.Expression
969
+ preRender_ serverRenderArg =
970
+ Elm.apply
971
+ (Elm.value
972
+ { importFrom = [ "RouteBuilder" ]
973
+ , name = "preRender"
974
+ , annotation =
975
+ Just
976
+ (Elm.Annotation.function
977
+ [ Elm.Annotation.record
978
+ [ ( "data"
979
+ , Elm.Annotation.function
980
+ [ Elm.Annotation.var "routeParams" ]
981
+ (throwableTask (Elm.Annotation.var "data"))
982
+ )
983
+ , ( "pages"
984
+ , throwableTask
985
+ (Elm.Annotation.list (Elm.Annotation.named [] "RouteParams"))
986
+ )
987
+ , ( "head"
988
+ , Elm.Annotation.function
989
+ [ Elm.Annotation.namedWith
990
+ [ "RouteBuilder" ]
991
+ "StaticPayload"
992
+ [ Elm.Annotation.var "data"
993
+ , Elm.Annotation.var "action"
994
+ , Elm.Annotation.var "routeParams"
995
+ ]
996
+ ]
997
+ (Elm.Annotation.list
998
+ (Elm.Annotation.namedWith [ "Head" ] "Tag" [])
999
+ )
1000
+ )
1001
+ ]
1002
+ ]
1003
+ (Elm.Annotation.namedWith
1004
+ [ "RouteBuilder" ]
1005
+ "Builder"
1006
+ [ Elm.Annotation.named [] "RouteParams"
1007
+ , Elm.Annotation.named [] "Data"
1008
+ , Elm.Annotation.named [] "Action"
1009
+ ]
1010
+ )
1011
+ )
1012
+ }
1013
+ )
1014
+ [ Elm.record
1015
+ [ Tuple.pair "data" (Elm.functionReduced "serverRenderUnpack" serverRenderArg.data)
1016
+ , Tuple.pair "pages" serverRenderArg.pages
1017
+ , Tuple.pair "head" (Elm.functionReduced "serverRenderUnpack" serverRenderArg.head)
1018
+ ]
1019
+ ]
1020
+
1021
+
1022
+ single_ :
1023
+ { data : Elm.Expression
1024
+ , head : Elm.Expression -> Elm.Expression
1025
+ }
1026
+ -> Elm.Expression
1027
+ single_ serverRenderArg =
1028
+ Elm.apply
1029
+ (Elm.value
1030
+ { importFrom = [ "RouteBuilder" ]
1031
+ , name = "single"
1032
+ , annotation =
1033
+ Just
1034
+ (Elm.Annotation.function
1035
+ [ Elm.Annotation.record
1036
+ [ ( "data"
1037
+ , throwableTask (Elm.Annotation.var "data")
1038
+ )
1039
+ , ( "head"
1040
+ , Elm.Annotation.function
1041
+ [ Elm.Annotation.namedWith
1042
+ [ "RouteBuilder" ]
1043
+ "StaticPayload"
1044
+ [ Elm.Annotation.var "data"
1045
+ , Elm.Annotation.var "action"
1046
+ , Elm.Annotation.var "routeParams"
1047
+ ]
1048
+ ]
1049
+ (Elm.Annotation.list
1050
+ (Elm.Annotation.namedWith [ "Head" ] "Tag" [])
1051
+ )
1052
+ )
1053
+ ]
1054
+ ]
1055
+ (Elm.Annotation.namedWith
1056
+ [ "RouteBuilder" ]
1057
+ "Builder"
1058
+ [ Elm.Annotation.named [] "RouteParams"
1059
+ , Elm.Annotation.named [] "Data"
1060
+ , Elm.Annotation.named [] "Action"
1061
+ ]
1062
+ )
1063
+ )
1064
+ }
1065
+ )
1066
+ [ Elm.record
1067
+ [ Tuple.pair "data" serverRenderArg.data
1068
+ , Tuple.pair "head" (Elm.functionReduced "serverRenderUnpack" serverRenderArg.head)
1069
+ ]
1070
+ ]
1071
+
1072
+
466
1073
  buildWithLocalState_ :
467
1074
  { view :
468
1075
  Elm.Expression
@@ -486,6 +1093,7 @@ buildWithLocalState_ :
486
1093
  -> Elm.Expression
487
1094
  -> Elm.Expression
488
1095
  -> Elm.Expression
1096
+ , state : State
489
1097
  }
490
1098
  -> Elm.Expression
491
1099
  -> Elm.Expression
@@ -493,7 +1101,13 @@ buildWithLocalState_ buildWithLocalStateArg buildWithLocalStateArg0 =
493
1101
  Elm.apply
494
1102
  (Elm.value
495
1103
  { importFrom = [ "RouteBuilder" ]
496
- , name = "buildWithLocalState"
1104
+ , name =
1105
+ case buildWithLocalStateArg.state of
1106
+ LocalState ->
1107
+ "buildWithLocalState"
1108
+
1109
+ SharedState ->
1110
+ "buildWithSharedState"
497
1111
  , annotation =
498
1112
  Just
499
1113
  (Elm.Annotation.function
@@ -544,11 +1158,11 @@ buildWithLocalState_ buildWithLocalStateArg buildWithLocalStateArg0 =
544
1158
  ]
545
1159
  ]
546
1160
  (Elm.Annotation.tuple
547
- (Elm.Annotation.var "model")
1161
+ (Elm.Annotation.named [] "Model")
548
1162
  (Elm.Annotation.namedWith
549
1163
  [ "Effect" ]
550
1164
  "Effect"
551
- [ Elm.Annotation.var "msg" ]
1165
+ [ Elm.Annotation.named [] "Msg" ]
552
1166
  )
553
1167
  )
554
1168
  )
@@ -562,20 +1176,32 @@ buildWithLocalState_ buildWithLocalStateArg buildWithLocalStateArg0 =
562
1176
  , Elm.Annotation.namedWith
563
1177
  [ "RouteBuilder" ]
564
1178
  "StaticPayload"
565
- [ Elm.Annotation.var "data"
566
- , Elm.Annotation.var "action"
567
- , Elm.Annotation.var "routeParams"
1179
+ [ localType "Data"
1180
+ , localType "ActionData"
1181
+ , localType "RouteParams"
568
1182
  ]
569
- , Elm.Annotation.var "msg"
570
- , Elm.Annotation.var "model"
1183
+ , Elm.Annotation.named [] "Msg"
1184
+ , Elm.Annotation.named [] "Model"
571
1185
  ]
572
- (Elm.Annotation.tuple
573
- (Elm.Annotation.var "model")
574
- (Elm.Annotation.namedWith
575
- [ "Effect" ]
576
- "Effect"
577
- [ Elm.Annotation.var "msg" ]
578
- )
1186
+ (case buildWithLocalStateArg.state of
1187
+ LocalState ->
1188
+ Elm.Annotation.tuple
1189
+ (localType "Model")
1190
+ (Elm.Annotation.namedWith
1191
+ [ "Effect" ]
1192
+ "Effect"
1193
+ [ localType "Msg" ]
1194
+ )
1195
+
1196
+ SharedState ->
1197
+ Elm.Annotation.triple
1198
+ (localType "Model")
1199
+ (Elm.Annotation.namedWith
1200
+ [ "Effect" ]
1201
+ "Effect"
1202
+ [ localType "Msg" ]
1203
+ )
1204
+ (Elm.Annotation.maybe (Elm.Annotation.named [ "Shared" ] "Msg"))
579
1205
  )
580
1206
  )
581
1207
  , ( "subscriptions"
@@ -591,25 +1217,25 @@ buildWithLocalState_ buildWithLocalStateArg buildWithLocalStateArg0 =
591
1217
  , Elm.Annotation.namedWith [ "Shared" ] "Model" []
592
1218
  , Elm.Annotation.var "model"
593
1219
  ]
594
- (Elm.Annotation.namedWith [] "Sub" [ Elm.Annotation.var "msg" ])
1220
+ (Elm.Annotation.namedWith [] "Sub" [ localType "Msg" ])
595
1221
  )
596
1222
  ]
597
1223
  , Elm.Annotation.namedWith
598
1224
  [ "RouteBuilder" ]
599
1225
  "Builder"
600
- [ Elm.Annotation.var "routeParams"
601
- , Elm.Annotation.var "data"
602
- , Elm.Annotation.var "action"
1226
+ [ localType "RouteParams"
1227
+ , localType "Data"
1228
+ , localType "ActionData"
603
1229
  ]
604
1230
  ]
605
1231
  (Elm.Annotation.namedWith
606
1232
  [ "RouteBuilder" ]
607
1233
  "StatefulRoute"
608
- [ Elm.Annotation.var "routeParams"
609
- , Elm.Annotation.var "data"
610
- , Elm.Annotation.var "action"
611
- , Elm.Annotation.var "model"
612
- , Elm.Annotation.var "msg"
1234
+ [ localType "RouteParams"
1235
+ , localType "Data"
1236
+ , localType "ActionData"
1237
+ , localType "Model"
1238
+ , localType "Msg"
613
1239
  ]
614
1240
  )
615
1241
  )
@@ -741,9 +1367,9 @@ buildNoState_ buildNoStateArg buildNoStateArg0 =
741
1367
  , Elm.Annotation.namedWith
742
1368
  [ "RouteBuilder" ]
743
1369
  "StaticPayload"
744
- [ Elm.Annotation.var "data"
745
- , Elm.Annotation.var "action"
746
- , Elm.Annotation.var "routeParams"
1370
+ [ Elm.Annotation.named [] "Data"
1371
+ , Elm.Annotation.named [] "ActionData"
1372
+ , Elm.Annotation.named [] "RouteParams"
747
1373
  ]
748
1374
  ]
749
1375
  (Elm.Annotation.namedWith
@@ -760,17 +1386,17 @@ buildNoState_ buildNoStateArg buildNoStateArg0 =
760
1386
  , Elm.Annotation.namedWith
761
1387
  [ "RouteBuilder" ]
762
1388
  "Builder"
763
- [ Elm.Annotation.var "routeParams"
764
- , Elm.Annotation.var "data"
765
- , Elm.Annotation.var "action"
1389
+ [ Elm.Annotation.named [] "RouteParams"
1390
+ , Elm.Annotation.named [] "Data"
1391
+ , Elm.Annotation.named [] "ActionData"
766
1392
  ]
767
1393
  ]
768
1394
  (Elm.Annotation.namedWith
769
1395
  [ "RouteBuilder" ]
770
1396
  "StatefulRoute"
771
- [ Elm.Annotation.var "routeParams"
772
- , Elm.Annotation.var "data"
773
- , Elm.Annotation.var "action"
1397
+ [ Elm.Annotation.named [] "RouteParams"
1398
+ , Elm.Annotation.named [] "Data"
1399
+ , Elm.Annotation.named [] "ActionData"
774
1400
  , Elm.Annotation.record []
775
1401
  , Elm.Annotation.unit
776
1402
  ]
@@ -798,3 +1424,20 @@ buildNoState_ buildNoStateArg buildNoStateArg0 =
798
1424
  ]
799
1425
  , buildNoStateArg0
800
1426
  ]
1427
+
1428
+
1429
+ effectType : Elm.Annotation.Annotation
1430
+ effectType =
1431
+ Elm.Annotation.namedWith
1432
+ [ "Effect" ]
1433
+ "Effect"
1434
+ [ Elm.Annotation.named [] "Msg" ]
1435
+
1436
+
1437
+ throwableTask : Elm.Annotation.Annotation -> Elm.Annotation.Annotation
1438
+ throwableTask dataType =
1439
+ Elm.Annotation.namedWith [ "BackendTask" ]
1440
+ "BackendTask"
1441
+ [ Elm.Annotation.named [ "FatalError" ] "FatalError"
1442
+ , dataType
1443
+ ]