elm-pages 3.0.0-beta.1 → 3.0.0-beta.10
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.
- package/README.md +10 -1
- package/codegen/elm-pages-codegen.js +803 -284
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm.json +1 -1
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +285 -101
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +1 -1
- package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +140 -17
- package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +218 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -1
- package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
- package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +1 -1
- package/generator/src/SharedTemplate.elm +1 -1
- package/generator/src/build.js +75 -42
- package/generator/src/compatibility-key.js +1 -0
- package/generator/src/config.js +41 -0
- package/generator/src/dev-server.js +36 -56
- package/generator/src/generate-template-module-connector.js +0 -28
- package/generator/src/pre-render-html.js +31 -17
- package/generator/src/render.js +2 -0
- package/generator/src/seo-renderer.js +11 -4
- package/generator/src/vite-utils.js +78 -0
- package/generator/template/app/Api.elm +1 -1
- package/generator/template/app/Site.elm +6 -1
- package/package.json +2 -3
- package/src/ApiRoute.elm +0 -3
- package/src/DataSource/File.elm +1 -1
- package/src/DataSource/Internal/Request.elm +0 -5
- package/src/DataSource.elm +39 -31
- package/src/Form/Field.elm +1 -1
- package/src/Form.elm +1 -1
- package/src/Head/Seo.elm +16 -27
- package/src/Head.elm +126 -0
- package/src/HtmlPrinter.elm +7 -3
- package/src/Pages/Generate.elm +544 -102
- package/src/Pages/Internal/NotFoundReason.elm +3 -2
- package/src/Pages/Internal/Platform/Cli.elm +91 -27
- package/src/Pages/Internal/Platform/Cli.elm.bak +1276 -0
- package/src/Pages/Internal/Platform/CompatibilityKey.elm +6 -0
- package/src/Pages/Internal/Platform.elm +34 -27
- package/src/Pages/ProgramConfig.elm +6 -3
- package/src/Server/Session.elm +149 -83
- package/src/Server/SetCookie.elm +89 -31
package/src/Pages/Generate.elm
CHANGED
|
@@ -1,8 +1,28 @@
|
|
|
1
|
-
module Pages.Generate exposing
|
|
1
|
+
module Pages.Generate exposing
|
|
2
|
+
( buildWithLocalState, buildWithSharedState, buildNoState, Builder
|
|
3
|
+
, Type(..)
|
|
4
|
+
, serverRender
|
|
5
|
+
, preRender, single
|
|
6
|
+
)
|
|
2
7
|
|
|
3
8
|
{-|
|
|
4
9
|
|
|
5
|
-
|
|
10
|
+
|
|
11
|
+
## Initializing the Generator Builder
|
|
12
|
+
|
|
13
|
+
@docs buildWithLocalState, buildWithSharedState, buildNoState, Builder
|
|
14
|
+
|
|
15
|
+
@docs Type
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## Generating Server-Rendered Pages
|
|
19
|
+
|
|
20
|
+
@docs serverRender
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## Generating pre-rendered pages
|
|
24
|
+
|
|
25
|
+
@docs preRender, single
|
|
6
26
|
|
|
7
27
|
-}
|
|
8
28
|
|
|
@@ -30,12 +50,18 @@ typeToDeclaration name type_ =
|
|
|
30
50
|
|
|
31
51
|
{-| -}
|
|
32
52
|
type Builder
|
|
33
|
-
=
|
|
53
|
+
= ServerRender
|
|
34
54
|
{ data : ( Type, Elm.Expression -> Elm.Expression )
|
|
35
55
|
, action : ( Type, Elm.Expression -> Elm.Expression )
|
|
36
56
|
, head : Elm.Expression -> Elm.Expression
|
|
37
57
|
, moduleName : List String
|
|
38
58
|
}
|
|
59
|
+
| PreRender
|
|
60
|
+
{ data : ( Type, Elm.Expression -> Elm.Expression )
|
|
61
|
+
, pages : Maybe Elm.Expression
|
|
62
|
+
, head : Elm.Expression -> Elm.Expression
|
|
63
|
+
, moduleName : List String
|
|
64
|
+
}
|
|
39
65
|
|
|
40
66
|
|
|
41
67
|
{-| -}
|
|
@@ -47,7 +73,56 @@ serverRender :
|
|
|
47
73
|
}
|
|
48
74
|
-> Builder
|
|
49
75
|
serverRender =
|
|
50
|
-
|
|
76
|
+
ServerRender
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
{-| -}
|
|
80
|
+
preRender :
|
|
81
|
+
{ data : ( Type, Elm.Expression -> Elm.Expression )
|
|
82
|
+
, pages : Elm.Expression
|
|
83
|
+
, head : Elm.Expression -> Elm.Expression
|
|
84
|
+
, moduleName : List String
|
|
85
|
+
}
|
|
86
|
+
-> Builder
|
|
87
|
+
preRender input =
|
|
88
|
+
--let
|
|
89
|
+
-- hasDynamicRouteSegments : Bool
|
|
90
|
+
-- hasDynamicRouteSegments =
|
|
91
|
+
-- RoutePattern.fromModuleName input.moduleName
|
|
92
|
+
-- -- TODO give error if not parseable here
|
|
93
|
+
-- |> Maybe.map RoutePattern.hasRouteParams
|
|
94
|
+
-- |> Maybe.withDefault False
|
|
95
|
+
--in
|
|
96
|
+
PreRender
|
|
97
|
+
{ data = input.data
|
|
98
|
+
, pages =
|
|
99
|
+
input.pages
|
|
100
|
+
|> Elm.withType
|
|
101
|
+
(Elm.Annotation.namedWith [ "DataSource" ]
|
|
102
|
+
"DataSource"
|
|
103
|
+
[ Elm.Annotation.list <| Elm.Annotation.named [] "RouteParams"
|
|
104
|
+
]
|
|
105
|
+
)
|
|
106
|
+
|> Just
|
|
107
|
+
, head = input.head
|
|
108
|
+
, moduleName = input.moduleName
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
{-| -}
|
|
113
|
+
single :
|
|
114
|
+
{ data : ( Type, Elm.Expression )
|
|
115
|
+
, head : Elm.Expression -> Elm.Expression
|
|
116
|
+
, moduleName : List String
|
|
117
|
+
}
|
|
118
|
+
-> Builder
|
|
119
|
+
single input =
|
|
120
|
+
PreRender
|
|
121
|
+
{ data = ( Tuple.first input.data, \_ -> Tuple.second input.data )
|
|
122
|
+
, pages = Nothing
|
|
123
|
+
, head = input.head
|
|
124
|
+
, moduleName = input.moduleName
|
|
125
|
+
}
|
|
51
126
|
|
|
52
127
|
|
|
53
128
|
{-| -}
|
|
@@ -56,20 +131,42 @@ buildNoState :
|
|
|
56
131
|
}
|
|
57
132
|
-> Builder
|
|
58
133
|
-> Elm.File
|
|
59
|
-
buildNoState definitions
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
134
|
+
buildNoState definitions builder_ =
|
|
135
|
+
case builder_ of
|
|
136
|
+
ServerRender builder ->
|
|
137
|
+
userFunction builder.moduleName
|
|
138
|
+
{ view = \_ -> definitions.view
|
|
139
|
+
, localState = Nothing
|
|
140
|
+
, data = builder.data |> Tuple.second
|
|
141
|
+
, action = builder.action |> Tuple.second |> Action
|
|
142
|
+
, head = builder.head
|
|
143
|
+
, types =
|
|
144
|
+
{ model = Alias (Elm.Annotation.record [])
|
|
145
|
+
, msg = Alias Elm.Annotation.unit
|
|
146
|
+
, data = builder.data |> Tuple.first
|
|
147
|
+
, actionData = builder.action |> Tuple.first
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
PreRender builder ->
|
|
152
|
+
userFunction builder.moduleName
|
|
153
|
+
{ view = \_ -> definitions.view
|
|
154
|
+
, localState = Nothing
|
|
155
|
+
, data = builder.data |> Tuple.second
|
|
156
|
+
, action = builder.pages |> Pages
|
|
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 =
|
|
163
|
+
Elm.Annotation.namedWith [ "DataSource" ]
|
|
164
|
+
"DataSource"
|
|
165
|
+
[ Elm.Annotation.list (Elm.Annotation.named [] "RouteParams")
|
|
166
|
+
]
|
|
167
|
+
|> Alias
|
|
168
|
+
}
|
|
169
|
+
}
|
|
73
170
|
|
|
74
171
|
|
|
75
172
|
{-| -}
|
|
@@ -83,25 +180,125 @@ buildWithLocalState :
|
|
|
83
180
|
}
|
|
84
181
|
-> Builder
|
|
85
182
|
-> Elm.File
|
|
86
|
-
buildWithLocalState definitions
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
183
|
+
buildWithLocalState definitions builder_ =
|
|
184
|
+
case builder_ of
|
|
185
|
+
ServerRender builder ->
|
|
186
|
+
userFunction builder.moduleName
|
|
187
|
+
{ view = definitions.view
|
|
188
|
+
, localState =
|
|
189
|
+
Just
|
|
190
|
+
{ update = definitions.update
|
|
191
|
+
, init = definitions.init
|
|
192
|
+
, subscriptions = definitions.subscriptions
|
|
193
|
+
, state = LocalState
|
|
194
|
+
}
|
|
195
|
+
, data = builder.data |> Tuple.second
|
|
196
|
+
, action = builder.action |> Tuple.second |> Action
|
|
197
|
+
, head = builder.head
|
|
198
|
+
, types =
|
|
199
|
+
{ model = definitions.model
|
|
200
|
+
, msg = definitions.msg
|
|
201
|
+
, data = builder.data |> Tuple.first
|
|
202
|
+
, actionData = builder.action |> Tuple.first
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
PreRender builder ->
|
|
207
|
+
userFunction builder.moduleName
|
|
208
|
+
{ view = definitions.view
|
|
209
|
+
, localState =
|
|
210
|
+
Just
|
|
211
|
+
{ update = definitions.update
|
|
212
|
+
, init = definitions.init
|
|
213
|
+
, subscriptions = definitions.subscriptions
|
|
214
|
+
, state = LocalState
|
|
215
|
+
}
|
|
216
|
+
, data = builder.data |> Tuple.second
|
|
217
|
+
, action = builder.pages |> Pages
|
|
218
|
+
, head = builder.head
|
|
219
|
+
, types =
|
|
220
|
+
{ model = definitions.model
|
|
221
|
+
, msg = definitions.msg
|
|
222
|
+
, data = builder.data |> Tuple.first
|
|
223
|
+
, actionData =
|
|
224
|
+
Elm.Annotation.namedWith [ "DataSource" ]
|
|
225
|
+
"DataSource"
|
|
226
|
+
[ Elm.Annotation.list (Elm.Annotation.named [] "RouteParams")
|
|
227
|
+
]
|
|
228
|
+
|> Alias
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
{-| -}
|
|
234
|
+
buildWithSharedState :
|
|
235
|
+
{ view : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
|
|
236
|
+
, update : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
|
|
237
|
+
, init : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
|
|
238
|
+
, subscriptions : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
|
|
239
|
+
, msg : Type
|
|
240
|
+
, model : Type
|
|
241
|
+
}
|
|
242
|
+
-> Builder
|
|
243
|
+
-> Elm.File
|
|
244
|
+
buildWithSharedState definitions builder_ =
|
|
245
|
+
case builder_ of
|
|
246
|
+
ServerRender builder ->
|
|
247
|
+
userFunction builder.moduleName
|
|
248
|
+
{ view = definitions.view
|
|
249
|
+
, localState =
|
|
250
|
+
Just
|
|
251
|
+
{ update = definitions.update
|
|
252
|
+
, init = definitions.init
|
|
253
|
+
, subscriptions = definitions.subscriptions
|
|
254
|
+
, state = SharedState
|
|
255
|
+
}
|
|
256
|
+
, data = builder.data |> Tuple.second
|
|
257
|
+
, action = builder.action |> Tuple.second |> Action
|
|
258
|
+
, head = builder.head
|
|
259
|
+
, types =
|
|
260
|
+
{ model = definitions.model
|
|
261
|
+
, msg = definitions.msg
|
|
262
|
+
, data = builder.data |> Tuple.first
|
|
263
|
+
, actionData = builder.action |> Tuple.first
|
|
264
|
+
}
|
|
94
265
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
266
|
+
|
|
267
|
+
PreRender builder ->
|
|
268
|
+
userFunction builder.moduleName
|
|
269
|
+
{ view = definitions.view
|
|
270
|
+
, localState =
|
|
271
|
+
Just
|
|
272
|
+
{ update = definitions.update
|
|
273
|
+
, init = definitions.init
|
|
274
|
+
, subscriptions = definitions.subscriptions
|
|
275
|
+
, state = SharedState
|
|
276
|
+
}
|
|
277
|
+
, data = builder.data |> Tuple.second
|
|
278
|
+
, action = builder.pages |> Pages
|
|
279
|
+
, head = builder.head
|
|
280
|
+
, types =
|
|
281
|
+
{ model = definitions.model
|
|
282
|
+
, msg = definitions.msg
|
|
283
|
+
, data = builder.data |> Tuple.first
|
|
284
|
+
, actionData =
|
|
285
|
+
Elm.Annotation.namedWith [ "DataSource" ]
|
|
286
|
+
"DataSource"
|
|
287
|
+
[ Elm.Annotation.list (Elm.Annotation.named [] "RouteParams")
|
|
288
|
+
]
|
|
289
|
+
|> Alias
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
type State
|
|
295
|
+
= SharedState
|
|
296
|
+
| LocalState
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
type ActionOrPages
|
|
300
|
+
= Action (Elm.Expression -> Elm.Expression)
|
|
301
|
+
| Pages (Maybe Elm.Expression)
|
|
105
302
|
|
|
106
303
|
|
|
107
304
|
{-| -}
|
|
@@ -114,9 +311,10 @@ userFunction :
|
|
|
114
311
|
{ update : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
|
|
115
312
|
, init : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
|
|
116
313
|
, subscriptions : Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression -> Elm.Expression
|
|
314
|
+
, state : State
|
|
117
315
|
}
|
|
118
316
|
, data : Elm.Expression -> Elm.Expression
|
|
119
|
-
, action :
|
|
317
|
+
, action : ActionOrPages
|
|
120
318
|
, head : Elm.Expression -> Elm.Expression
|
|
121
319
|
, types : { model : Type, msg : Type, data : Type, actionData : Type }
|
|
122
320
|
}
|
|
@@ -180,6 +378,7 @@ userFunction moduleName definitions =
|
|
|
180
378
|
}
|
|
181
379
|
, 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
380
|
, 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 }
|
|
381
|
+
, state : State
|
|
183
382
|
}
|
|
184
383
|
localDefinitions =
|
|
185
384
|
definitions.localState
|
|
@@ -222,28 +421,88 @@ userFunction moduleName definitions =
|
|
|
222
421
|
( "sharedModel", Nothing )
|
|
223
422
|
( "model", Nothing )
|
|
224
423
|
localState.subscriptions
|
|
424
|
+
, state = localState.state
|
|
225
425
|
}
|
|
226
426
|
)
|
|
227
427
|
|
|
228
|
-
dataFn : { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression }
|
|
428
|
+
dataFn : { declaration : Elm.Declaration, call : List Elm.Expression -> Elm.Expression, callFrom : List String -> List Elm.Expression -> Elm.Expression }
|
|
229
429
|
dataFn =
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
430
|
+
case definitions.action of
|
|
431
|
+
Pages Nothing ->
|
|
432
|
+
Elm.Declare.function "data"
|
|
433
|
+
[]
|
|
434
|
+
(\_ ->
|
|
435
|
+
definitions.data Elm.unit
|
|
436
|
+
|> Elm.withType
|
|
437
|
+
(case definitions.action of
|
|
438
|
+
Pages _ ->
|
|
439
|
+
Elm.Annotation.namedWith [ "DataSource" ]
|
|
440
|
+
"DataSource"
|
|
441
|
+
[ Elm.Annotation.named [] "Data"
|
|
442
|
+
]
|
|
443
|
+
|
|
444
|
+
Action _ ->
|
|
445
|
+
myType "Data"
|
|
446
|
+
)
|
|
447
|
+
)
|
|
237
448
|
|
|
238
|
-
|
|
449
|
+
_ ->
|
|
450
|
+
Elm.Declare.function "data"
|
|
451
|
+
[ ( "routeParams"
|
|
452
|
+
, "RouteParams"
|
|
453
|
+
|> Elm.Annotation.named []
|
|
454
|
+
|> Just
|
|
455
|
+
)
|
|
456
|
+
]
|
|
457
|
+
(\args ->
|
|
458
|
+
case args of
|
|
459
|
+
[ arg ] ->
|
|
460
|
+
definitions.data arg
|
|
461
|
+
|> Elm.withType
|
|
462
|
+
(case definitions.action of
|
|
463
|
+
Pages _ ->
|
|
464
|
+
Elm.Annotation.namedWith [ "DataSource" ]
|
|
465
|
+
"DataSource"
|
|
466
|
+
[ Elm.Annotation.named [] "Data"
|
|
467
|
+
]
|
|
468
|
+
|
|
469
|
+
Action _ ->
|
|
470
|
+
myType "Data"
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
_ ->
|
|
474
|
+
Elm.unit
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
actionFn : Maybe { declaration : Elm.Declaration, call : List Elm.Expression -> Elm.Expression, callFrom : List String -> List Elm.Expression -> Elm.Expression }
|
|
239
478
|
actionFn =
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
479
|
+
case definitions.action of
|
|
480
|
+
Action action_ ->
|
|
481
|
+
Elm.Declare.function "action"
|
|
482
|
+
[ ( "routeParams"
|
|
483
|
+
, "RouteParams"
|
|
484
|
+
|> Elm.Annotation.named []
|
|
485
|
+
|> Just
|
|
486
|
+
)
|
|
487
|
+
]
|
|
488
|
+
(\args ->
|
|
489
|
+
case args of
|
|
490
|
+
[ arg ] ->
|
|
491
|
+
action_ arg |> Elm.withType (myType "ActionData")
|
|
492
|
+
|
|
493
|
+
_ ->
|
|
494
|
+
Elm.unit
|
|
495
|
+
)
|
|
496
|
+
|> Just
|
|
497
|
+
|
|
498
|
+
Pages pages_ ->
|
|
499
|
+
pages_
|
|
500
|
+
|> Maybe.map
|
|
501
|
+
(\justPagesExpression ->
|
|
502
|
+
Elm.Declare.function "pages"
|
|
503
|
+
[]
|
|
504
|
+
(\_ -> justPagesExpression)
|
|
505
|
+
)
|
|
247
506
|
|
|
248
507
|
headFn : { declaration : Elm.Declaration, call : Elm.Expression -> Elm.Expression, callFrom : List String -> Elm.Expression -> Elm.Expression }
|
|
249
508
|
headFn =
|
|
@@ -268,49 +527,88 @@ userFunction moduleName definitions =
|
|
|
268
527
|
)
|
|
269
528
|
)
|
|
270
529
|
, Elm.declaration "route"
|
|
271
|
-
(
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
>> Elm.withType
|
|
291
|
-
(Elm.Annotation.namedWith [ "RouteBuilder" ]
|
|
292
|
-
"StatefulRoute"
|
|
293
|
-
[ localType "RouteParams"
|
|
294
|
-
, localType "Data"
|
|
295
|
-
, localType "ActionData"
|
|
296
|
-
, localType "Model"
|
|
297
|
-
, localType "Msg"
|
|
298
|
-
]
|
|
299
|
-
)
|
|
530
|
+
(case definitions.action of
|
|
531
|
+
Action _ ->
|
|
532
|
+
serverRender_
|
|
533
|
+
{ action =
|
|
534
|
+
\routeParams ->
|
|
535
|
+
actionFn
|
|
536
|
+
|> Maybe.map
|
|
537
|
+
(\justActionFn ->
|
|
538
|
+
justActionFn.call [ routeParams ]
|
|
539
|
+
|> Elm.withType (myType "ActionData")
|
|
540
|
+
)
|
|
541
|
+
|> Maybe.withDefault Elm.unit
|
|
542
|
+
, data =
|
|
543
|
+
\routeParams ->
|
|
544
|
+
dataFn.call [ routeParams ]
|
|
545
|
+
|> Elm.withType (myType "Data")
|
|
546
|
+
, head = headFn.call
|
|
547
|
+
}
|
|
300
548
|
|
|
549
|
+
Pages _ ->
|
|
550
|
+
(case actionFn of
|
|
301
551
|
Nothing ->
|
|
302
|
-
|
|
303
|
-
{
|
|
552
|
+
single_
|
|
553
|
+
{ data =
|
|
554
|
+
dataFn.call []
|
|
555
|
+
|> Elm.withType
|
|
556
|
+
(Elm.Annotation.namedWith [ "DataSource" ]
|
|
557
|
+
"DataSource"
|
|
558
|
+
[ Elm.Annotation.named [] "Data"
|
|
559
|
+
]
|
|
560
|
+
)
|
|
561
|
+
, head = headFn.call
|
|
304
562
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
]
|
|
312
|
-
|
|
313
|
-
|
|
563
|
+
|
|
564
|
+
Just justActionFn ->
|
|
565
|
+
preRender_
|
|
566
|
+
{ pages = justActionFn.call []
|
|
567
|
+
, data =
|
|
568
|
+
\routeParams ->
|
|
569
|
+
dataFn.call [ routeParams ]
|
|
570
|
+
|> Elm.withType
|
|
571
|
+
(Elm.Annotation.namedWith [ "DataSource" ]
|
|
572
|
+
"DataSource"
|
|
573
|
+
[ Elm.Annotation.named [] "Data"
|
|
574
|
+
]
|
|
575
|
+
)
|
|
576
|
+
, head = headFn.call
|
|
577
|
+
}
|
|
578
|
+
)
|
|
579
|
+
|> (case localDefinitions of
|
|
580
|
+
Just local ->
|
|
581
|
+
buildWithLocalState_
|
|
582
|
+
{ view = viewFn.call
|
|
583
|
+
, update = local.updateFn.call
|
|
584
|
+
, init = local.initFn.call
|
|
585
|
+
, subscriptions = local.subscriptionsFn.call
|
|
586
|
+
, state = local.state
|
|
587
|
+
}
|
|
588
|
+
>> Elm.withType
|
|
589
|
+
(Elm.Annotation.namedWith [ "RouteBuilder" ]
|
|
590
|
+
"StatefulRoute"
|
|
591
|
+
[ localType "RouteParams"
|
|
592
|
+
, localType "Data"
|
|
593
|
+
, localType "ActionData"
|
|
594
|
+
, localType "Model"
|
|
595
|
+
, localType "Msg"
|
|
596
|
+
]
|
|
597
|
+
)
|
|
598
|
+
|
|
599
|
+
Nothing ->
|
|
600
|
+
buildNoState_
|
|
601
|
+
{ view = viewFn.call Elm.unit
|
|
602
|
+
}
|
|
603
|
+
>> Elm.withType
|
|
604
|
+
(Elm.Annotation.namedWith [ "RouteBuilder" ]
|
|
605
|
+
"StatelessRoute"
|
|
606
|
+
[ localType "RouteParams"
|
|
607
|
+
, localType "Data"
|
|
608
|
+
, localType "ActionData"
|
|
609
|
+
]
|
|
610
|
+
)
|
|
611
|
+
)
|
|
314
612
|
)
|
|
315
613
|
]
|
|
316
614
|
++ (case localDefinitions of
|
|
@@ -326,10 +624,13 @@ userFunction moduleName definitions =
|
|
|
326
624
|
++ [ definitions.types.data |> typeToDeclaration "Data"
|
|
327
625
|
, definitions.types.actionData |> typeToDeclaration "ActionData"
|
|
328
626
|
, dataFn.declaration
|
|
329
|
-
, actionFn.declaration
|
|
330
627
|
, headFn.declaration
|
|
331
628
|
, viewFn.declaration
|
|
332
629
|
]
|
|
630
|
+
++ ([ actionFn |> Maybe.map .declaration
|
|
631
|
+
]
|
|
632
|
+
|> List.filterMap identity
|
|
633
|
+
)
|
|
333
634
|
)
|
|
334
635
|
|
|
335
636
|
|
|
@@ -463,6 +764,128 @@ serverRender_ serverRenderArg =
|
|
|
463
764
|
]
|
|
464
765
|
|
|
465
766
|
|
|
767
|
+
preRender_ :
|
|
768
|
+
{ data : Elm.Expression -> Elm.Expression
|
|
769
|
+
, pages : Elm.Expression
|
|
770
|
+
, head : Elm.Expression -> Elm.Expression
|
|
771
|
+
}
|
|
772
|
+
-> Elm.Expression
|
|
773
|
+
preRender_ serverRenderArg =
|
|
774
|
+
Elm.apply
|
|
775
|
+
(Elm.value
|
|
776
|
+
{ importFrom = [ "RouteBuilder" ]
|
|
777
|
+
, name = "preRender"
|
|
778
|
+
, annotation =
|
|
779
|
+
Just
|
|
780
|
+
(Elm.Annotation.function
|
|
781
|
+
[ Elm.Annotation.record
|
|
782
|
+
[ ( "data"
|
|
783
|
+
, Elm.Annotation.function
|
|
784
|
+
[ Elm.Annotation.var "routeParams" ]
|
|
785
|
+
(Elm.Annotation.namedWith
|
|
786
|
+
[ "DataSource" ]
|
|
787
|
+
"DataSource"
|
|
788
|
+
[ Elm.Annotation.var "data"
|
|
789
|
+
]
|
|
790
|
+
)
|
|
791
|
+
)
|
|
792
|
+
, ( "pages"
|
|
793
|
+
, Elm.Annotation.namedWith
|
|
794
|
+
[ "DataSource" ]
|
|
795
|
+
"DataSource"
|
|
796
|
+
[ Elm.Annotation.list (Elm.Annotation.named [] "RouteParams")
|
|
797
|
+
]
|
|
798
|
+
)
|
|
799
|
+
, ( "head"
|
|
800
|
+
, Elm.Annotation.function
|
|
801
|
+
[ Elm.Annotation.namedWith
|
|
802
|
+
[ "RouteBuilder" ]
|
|
803
|
+
"StaticPayload"
|
|
804
|
+
[ Elm.Annotation.var "data"
|
|
805
|
+
, Elm.Annotation.var "action"
|
|
806
|
+
, Elm.Annotation.var "routeParams"
|
|
807
|
+
]
|
|
808
|
+
]
|
|
809
|
+
(Elm.Annotation.list
|
|
810
|
+
(Elm.Annotation.namedWith [ "Head" ] "Tag" [])
|
|
811
|
+
)
|
|
812
|
+
)
|
|
813
|
+
]
|
|
814
|
+
]
|
|
815
|
+
(Elm.Annotation.namedWith
|
|
816
|
+
[ "RouteBuilder" ]
|
|
817
|
+
"Builder"
|
|
818
|
+
[ Elm.Annotation.named [] "RouteParams"
|
|
819
|
+
, Elm.Annotation.named [] "Data"
|
|
820
|
+
, Elm.Annotation.named [] "Action"
|
|
821
|
+
]
|
|
822
|
+
)
|
|
823
|
+
)
|
|
824
|
+
}
|
|
825
|
+
)
|
|
826
|
+
[ Elm.record
|
|
827
|
+
[ Tuple.pair "data" (Elm.functionReduced "serverRenderUnpack" serverRenderArg.data)
|
|
828
|
+
, Tuple.pair "pages" serverRenderArg.pages
|
|
829
|
+
, Tuple.pair "head" (Elm.functionReduced "serverRenderUnpack" serverRenderArg.head)
|
|
830
|
+
]
|
|
831
|
+
]
|
|
832
|
+
|
|
833
|
+
|
|
834
|
+
single_ :
|
|
835
|
+
{ data : Elm.Expression
|
|
836
|
+
, head : Elm.Expression -> Elm.Expression
|
|
837
|
+
}
|
|
838
|
+
-> Elm.Expression
|
|
839
|
+
single_ serverRenderArg =
|
|
840
|
+
Elm.apply
|
|
841
|
+
(Elm.value
|
|
842
|
+
{ importFrom = [ "RouteBuilder" ]
|
|
843
|
+
, name = "single"
|
|
844
|
+
, annotation =
|
|
845
|
+
Just
|
|
846
|
+
(Elm.Annotation.function
|
|
847
|
+
[ Elm.Annotation.record
|
|
848
|
+
[ ( "data"
|
|
849
|
+
, Elm.Annotation.namedWith
|
|
850
|
+
[ "DataSource" ]
|
|
851
|
+
"DataSource"
|
|
852
|
+
[ Elm.Annotation.var "data"
|
|
853
|
+
]
|
|
854
|
+
)
|
|
855
|
+
, ( "head"
|
|
856
|
+
, Elm.Annotation.function
|
|
857
|
+
[ Elm.Annotation.namedWith
|
|
858
|
+
[ "RouteBuilder" ]
|
|
859
|
+
"StaticPayload"
|
|
860
|
+
[ Elm.Annotation.var "data"
|
|
861
|
+
, Elm.Annotation.var "action"
|
|
862
|
+
, Elm.Annotation.var "routeParams"
|
|
863
|
+
]
|
|
864
|
+
]
|
|
865
|
+
(Elm.Annotation.list
|
|
866
|
+
(Elm.Annotation.namedWith [ "Head" ] "Tag" [])
|
|
867
|
+
)
|
|
868
|
+
)
|
|
869
|
+
]
|
|
870
|
+
]
|
|
871
|
+
(Elm.Annotation.namedWith
|
|
872
|
+
[ "RouteBuilder" ]
|
|
873
|
+
"Builder"
|
|
874
|
+
[ Elm.Annotation.named [] "RouteParams"
|
|
875
|
+
, Elm.Annotation.named [] "Data"
|
|
876
|
+
, Elm.Annotation.named [] "Action"
|
|
877
|
+
]
|
|
878
|
+
)
|
|
879
|
+
)
|
|
880
|
+
}
|
|
881
|
+
)
|
|
882
|
+
[ Elm.record
|
|
883
|
+
[ Tuple.pair "data" serverRenderArg.data
|
|
884
|
+
, Tuple.pair "head" (Elm.functionReduced "serverRenderUnpack" serverRenderArg.head)
|
|
885
|
+
]
|
|
886
|
+
]
|
|
887
|
+
|
|
888
|
+
|
|
466
889
|
buildWithLocalState_ :
|
|
467
890
|
{ view :
|
|
468
891
|
Elm.Expression
|
|
@@ -486,6 +909,7 @@ buildWithLocalState_ :
|
|
|
486
909
|
-> Elm.Expression
|
|
487
910
|
-> Elm.Expression
|
|
488
911
|
-> Elm.Expression
|
|
912
|
+
, state : State
|
|
489
913
|
}
|
|
490
914
|
-> Elm.Expression
|
|
491
915
|
-> Elm.Expression
|
|
@@ -493,7 +917,13 @@ buildWithLocalState_ buildWithLocalStateArg buildWithLocalStateArg0 =
|
|
|
493
917
|
Elm.apply
|
|
494
918
|
(Elm.value
|
|
495
919
|
{ importFrom = [ "RouteBuilder" ]
|
|
496
|
-
, name =
|
|
920
|
+
, name =
|
|
921
|
+
case buildWithLocalStateArg.state of
|
|
922
|
+
LocalState ->
|
|
923
|
+
"buildWithLocalState"
|
|
924
|
+
|
|
925
|
+
SharedState ->
|
|
926
|
+
"buildWithSharedState"
|
|
497
927
|
, annotation =
|
|
498
928
|
Just
|
|
499
929
|
(Elm.Annotation.function
|
|
@@ -569,13 +999,25 @@ buildWithLocalState_ buildWithLocalStateArg buildWithLocalStateArg0 =
|
|
|
569
999
|
, Elm.Annotation.var "msg"
|
|
570
1000
|
, Elm.Annotation.var "model"
|
|
571
1001
|
]
|
|
572
|
-
(
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
1002
|
+
(case buildWithLocalStateArg.state of
|
|
1003
|
+
LocalState ->
|
|
1004
|
+
Elm.Annotation.tuple
|
|
1005
|
+
(Elm.Annotation.var "model")
|
|
1006
|
+
(Elm.Annotation.namedWith
|
|
1007
|
+
[ "Effect" ]
|
|
1008
|
+
"Effect"
|
|
1009
|
+
[ Elm.Annotation.var "msg" ]
|
|
1010
|
+
)
|
|
1011
|
+
|
|
1012
|
+
SharedState ->
|
|
1013
|
+
Elm.Annotation.triple
|
|
1014
|
+
(Elm.Annotation.var "model")
|
|
1015
|
+
(Elm.Annotation.namedWith
|
|
1016
|
+
[ "Effect" ]
|
|
1017
|
+
"Effect"
|
|
1018
|
+
[ Elm.Annotation.var "msg" ]
|
|
1019
|
+
)
|
|
1020
|
+
(Elm.Annotation.maybe (Elm.Annotation.named [ "Shared" ] "Msg"))
|
|
579
1021
|
)
|
|
580
1022
|
)
|
|
581
1023
|
, ( "subscriptions"
|