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
@@ -0,0 +1,6 @@
1
+ module Pages.Internal.Platform.CompatibilityKey exposing (currentCompatibilityKey)
2
+
3
+
4
+ currentCompatibilityKey : Int
5
+ currentCompatibilityKey =
6
+ 6
@@ -7,8 +7,7 @@ import Pages.StaticHttp.Request as StaticHttp
7
7
 
8
8
  type Effect
9
9
  = NoEffect
10
- | FetchHttp StaticHttp.Request
10
+ | FetchHttp (List StaticHttp.Request)
11
11
  | Batch (List Effect)
12
12
  | SendSinglePage ToJsSuccessPayloadNewCombined
13
13
  | SendSinglePageNew Bytes ToJsSuccessPayloadNewCombined
14
- | Continue
@@ -0,0 +1,373 @@
1
+ module Pages.Internal.Platform.GeneratorApplication exposing (Flags, Model, Msg(..), init, requestDecoder, update, app)
2
+
3
+ {-| Exposed for internal use only (used in generated code).
4
+
5
+ @docs Flags, Model, Msg, init, requestDecoder, update, app
6
+
7
+ -}
8
+
9
+ import BackendTask exposing (BackendTask)
10
+ import BuildError exposing (BuildError)
11
+ import Cli.Program as Program exposing (FlagsIncludingArgv)
12
+ import Codec
13
+ import Dict
14
+ import FatalError exposing (FatalError)
15
+ import HtmlPrinter
16
+ import Json.Decode as Decode
17
+ import Json.Encode as Encode
18
+ import Pages.GeneratorProgramConfig exposing (GeneratorProgramConfig)
19
+ import Pages.Internal.Platform.CompatibilityKey
20
+ import Pages.Internal.Platform.Effect as Effect exposing (Effect)
21
+ import Pages.Internal.Platform.StaticResponses as StaticResponses
22
+ import Pages.Internal.Platform.ToJsPayload as ToJsPayload
23
+ import Pages.Internal.Script
24
+ import Pages.StaticHttp.Request
25
+ import TerminalText as Terminal
26
+
27
+
28
+ {-| -}
29
+ type alias Flags =
30
+ { compatibilityKey : Int
31
+ }
32
+
33
+
34
+ {-| -}
35
+ type alias Model =
36
+ { staticResponses : BackendTask FatalError ()
37
+ , errors : List BuildError
38
+ }
39
+
40
+
41
+ {-| -}
42
+ type Msg
43
+ = GotDataBatch Decode.Value
44
+ | GotBuildError BuildError
45
+
46
+
47
+ {-| -}
48
+ app :
49
+ GeneratorProgramConfig
50
+ -> Program.StatefulProgram Model Msg (BackendTask FatalError ()) Flags
51
+ app config =
52
+ let
53
+ cliConfig : Program.Config (BackendTask FatalError ())
54
+ cliConfig =
55
+ case config.data of
56
+ Pages.Internal.Script.Script theCliConfig ->
57
+ theCliConfig HtmlPrinter.htmlToString
58
+ in
59
+ Program.stateful
60
+ { init =
61
+ \flags cliOptions ->
62
+ init cliOptions flags
63
+ |> Tuple.mapSecond (perform config)
64
+ , update =
65
+ \_ msg model ->
66
+ update msg model
67
+ |> Tuple.mapSecond (perform config)
68
+ , subscriptions =
69
+ \_ ->
70
+ Sub.batch
71
+ [ config.fromJsPort
72
+ |> Sub.map
73
+ (\jsonValue ->
74
+ let
75
+ decoder : Decode.Decoder Msg
76
+ decoder =
77
+ Decode.field "tag" Decode.string
78
+ |> Decode.andThen
79
+ (\tag ->
80
+ case tag of
81
+ "BuildError" ->
82
+ Decode.field "data"
83
+ (Decode.map2
84
+ (\message title ->
85
+ { title = title
86
+ , message = message
87
+ , fatal = True
88
+ , path = "" -- TODO wire in current path here
89
+ }
90
+ )
91
+ (Decode.field "message" Decode.string |> Decode.map Terminal.fromAnsiString)
92
+ (Decode.field "title" Decode.string)
93
+ )
94
+ |> Decode.map GotBuildError
95
+
96
+ _ ->
97
+ Decode.fail "Unhandled msg"
98
+ )
99
+ in
100
+ Decode.decodeValue decoder jsonValue
101
+ |> Result.mapError
102
+ (\error ->
103
+ ("From location 1: "
104
+ ++ (error
105
+ |> Decode.errorToString
106
+ )
107
+ )
108
+ |> BuildError.internal
109
+ |> GotBuildError
110
+ )
111
+ |> mergeResult
112
+ )
113
+ , config.gotBatchSub |> Sub.map GotDataBatch
114
+ ]
115
+ , config = cliConfig
116
+ , printAndExitFailure =
117
+ \string ->
118
+ ToJsPayload.Errors
119
+ [ { title = "Invalid CLI arguments"
120
+ , path = ""
121
+ , message =
122
+ [ Terminal.text string
123
+ ]
124
+ , fatal = True
125
+ }
126
+ ]
127
+ |> Codec.encodeToValue (ToJsPayload.successCodecNew2 "" "")
128
+ |> config.toJsPort
129
+ |> Cmd.map never
130
+ , printAndExitSuccess = \string -> config.toJsPort (Encode.string string) |> Cmd.map never
131
+ }
132
+
133
+
134
+ mergeResult : Result a a -> a
135
+ mergeResult r =
136
+ case r of
137
+ Ok rr ->
138
+ rr
139
+
140
+ Err rr ->
141
+ rr
142
+
143
+
144
+ {-| -}
145
+ requestDecoder : Decode.Decoder Pages.StaticHttp.Request.Request
146
+ requestDecoder =
147
+ Pages.StaticHttp.Request.codec
148
+ |> Codec.decoder
149
+
150
+
151
+ flatten : GeneratorProgramConfig -> List Effect -> Cmd Msg
152
+ flatten config list =
153
+ Cmd.batch (flattenHelp [] config list)
154
+
155
+
156
+ flattenHelp : List (Cmd Msg) -> GeneratorProgramConfig -> List Effect -> List (Cmd Msg)
157
+ flattenHelp soFar config list =
158
+ case list of
159
+ first :: rest ->
160
+ flattenHelp
161
+ (perform config first :: soFar)
162
+ config
163
+ rest
164
+
165
+ [] ->
166
+ soFar
167
+
168
+
169
+ perform :
170
+ GeneratorProgramConfig
171
+ -> Effect
172
+ -> Cmd Msg
173
+ perform config effect =
174
+ let
175
+ canonicalSiteUrl : String
176
+ canonicalSiteUrl =
177
+ ""
178
+ in
179
+ case effect of
180
+ Effect.NoEffect ->
181
+ Cmd.none
182
+
183
+ Effect.Batch list ->
184
+ flatten config list
185
+
186
+ Effect.FetchHttp requests ->
187
+ requests
188
+ |> List.map
189
+ (\request ->
190
+ ( Pages.StaticHttp.Request.hash request, request )
191
+ )
192
+ |> ToJsPayload.DoHttp
193
+ |> Codec.encoder (ToJsPayload.successCodecNew2 canonicalSiteUrl "")
194
+ |> config.toJsPort
195
+ |> Cmd.map never
196
+
197
+ Effect.SendSinglePage info ->
198
+ let
199
+ currentPagePath : String
200
+ currentPagePath =
201
+ case info of
202
+ ToJsPayload.PageProgress toJsSuccessPayloadNew ->
203
+ toJsSuccessPayloadNew.route
204
+
205
+ _ ->
206
+ ""
207
+ in
208
+ info
209
+ |> Codec.encoder (ToJsPayload.successCodecNew2 canonicalSiteUrl currentPagePath)
210
+ |> config.toJsPort
211
+ |> Cmd.map never
212
+
213
+ Effect.SendSinglePageNew rawBytes info ->
214
+ let
215
+ currentPagePath : String
216
+ currentPagePath =
217
+ case info of
218
+ ToJsPayload.PageProgress toJsSuccessPayloadNew ->
219
+ toJsSuccessPayloadNew.route
220
+
221
+ _ ->
222
+ ""
223
+ in
224
+ { oldThing =
225
+ info
226
+ |> Codec.encoder (ToJsPayload.successCodecNew2 canonicalSiteUrl currentPagePath)
227
+ , binaryPageData = rawBytes
228
+ }
229
+ |> config.sendPageData
230
+ |> Cmd.map never
231
+
232
+
233
+
234
+ -- TODO use Json.Decode.Value for flagsDecoder instead of hardcoded record flags
235
+ --flagsDecoder :
236
+ -- Decode.Decoder
237
+ -- { staticHttpCache : RequestsAndPending
238
+ -- , compatibilityKey : Int
239
+ -- }
240
+ --flagsDecoder =
241
+ -- Decode.map3
242
+ -- (\staticHttpCache compatibilityKey ->
243
+ -- { staticHttpCache = staticHttpCache
244
+ -- , isDevServer = isDevServer
245
+ -- , compatibilityKey = compatibilityKey
246
+ -- }
247
+ -- )
248
+ -- (Decode.succeed Dict.empty)
249
+ -- (Decode.field "compatibilityKey" Decode.int)
250
+
251
+
252
+ {-| -}
253
+ init :
254
+ BackendTask FatalError ()
255
+ -> FlagsIncludingArgv Flags
256
+ -> ( Model, Effect )
257
+ init execute flags =
258
+ if flags.compatibilityKey == Pages.Internal.Platform.CompatibilityKey.currentCompatibilityKey then
259
+ initLegacy execute
260
+
261
+ else
262
+ let
263
+ elmPackageAheadOfNpmPackage : Bool
264
+ elmPackageAheadOfNpmPackage =
265
+ Pages.Internal.Platform.CompatibilityKey.currentCompatibilityKey > flags.compatibilityKey
266
+
267
+ message : String
268
+ message =
269
+ "The NPM package and Elm package you have installed are incompatible. If you are updating versions, be sure to update both the elm-pages Elm and NPM package.\n\n"
270
+ ++ (if elmPackageAheadOfNpmPackage then
271
+ "The elm-pages Elm package is ahead of the elm-pages NPM package. Try updating the elm-pages NPM package?"
272
+
273
+ else
274
+ "The elm-pages NPM package is ahead of the elm-pages Elm package. Try updating the elm-pages Elm package?"
275
+ )
276
+ in
277
+ updateAndSendPortIfDone
278
+ { staticResponses = StaticResponses.empty ()
279
+ , errors =
280
+ [ { title = "Incompatible NPM and Elm package versions"
281
+ , message = [ Terminal.text <| message ]
282
+ , fatal = True
283
+ , path = ""
284
+ }
285
+ ]
286
+ }
287
+
288
+
289
+ initLegacy :
290
+ BackendTask FatalError ()
291
+ -> ( Model, Effect )
292
+ initLegacy execute =
293
+ let
294
+ staticResponses : BackendTask FatalError ()
295
+ staticResponses =
296
+ StaticResponses.renderApiRequest execute
297
+
298
+ initialModel : Model
299
+ initialModel =
300
+ { staticResponses = staticResponses
301
+ , errors = []
302
+ }
303
+ in
304
+ StaticResponses.nextStep (Encode.object []) initialModel.staticResponses initialModel
305
+ |> nextStepToEffect
306
+ initialModel
307
+
308
+
309
+ updateAndSendPortIfDone :
310
+ Model
311
+ -> ( Model, Effect )
312
+ updateAndSendPortIfDone model =
313
+ StaticResponses.nextStep (Encode.object [])
314
+ model.staticResponses
315
+ model
316
+ |> nextStepToEffect model
317
+
318
+
319
+ {-| -}
320
+ update :
321
+ Msg
322
+ -> Model
323
+ -> ( Model, Effect )
324
+ update msg model =
325
+ case msg of
326
+ GotDataBatch batch ->
327
+ StaticResponses.nextStep batch
328
+ model.staticResponses
329
+ model
330
+ |> nextStepToEffect model
331
+
332
+ GotBuildError buildError ->
333
+ let
334
+ updatedModel : Model
335
+ updatedModel =
336
+ { model
337
+ | errors =
338
+ buildError :: model.errors
339
+ }
340
+ in
341
+ StaticResponses.nextStep (Encode.object [])
342
+ updatedModel.staticResponses
343
+ updatedModel
344
+ |> nextStepToEffect updatedModel
345
+
346
+
347
+ nextStepToEffect :
348
+ Model
349
+ -> StaticResponses.NextStep route ()
350
+ -> ( Model, Effect )
351
+ nextStepToEffect model nextStep =
352
+ case nextStep of
353
+ StaticResponses.Continue httpRequests updatedStaticResponsesModel ->
354
+ ( { model
355
+ | staticResponses = updatedStaticResponsesModel
356
+ }
357
+ , Effect.FetchHttp httpRequests
358
+ )
359
+
360
+ StaticResponses.Finish () ->
361
+ ( model
362
+ , { body = Encode.null
363
+ , staticHttpCache = Dict.empty
364
+ , statusCode = 200
365
+ }
366
+ |> ToJsPayload.SendApiResponse
367
+ |> Effect.SendSinglePage
368
+ )
369
+
370
+ StaticResponses.FinishedWithErrors buildErrors ->
371
+ ( model
372
+ , buildErrors |> ToJsPayload.Errors |> Effect.SendSinglePage
373
+ )