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