elm-pages 3.0.0-beta.9 → 3.0.0

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 (165) hide show
  1. package/README.md +2 -2
  2. package/adapter/netlify.js +207 -0
  3. package/codegen/{elm-pages-codegen.js → elm-pages-codegen.cjs} +2731 -2939
  4. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
  5. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
  6. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
  7. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  8. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  9. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  10. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm.json +1 -1
  11. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1527 -422
  12. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +16840 -13653
  13. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  14. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
  15. package/generator/dead-code-review/elm.json +9 -7
  16. package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +59 -10
  17. package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +52 -36
  18. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
  19. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
  20. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
  21. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
  22. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  23. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  24. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  25. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -1
  26. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1527 -422
  27. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +25118 -21832
  28. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  29. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
  30. package/generator/review/elm.json +10 -10
  31. package/generator/src/RouteBuilder.elm +93 -128
  32. package/generator/src/SharedTemplate.elm +8 -7
  33. package/generator/src/SiteConfig.elm +3 -2
  34. package/generator/src/basepath-middleware.js +3 -3
  35. package/generator/src/build.js +143 -59
  36. package/generator/src/cli.js +292 -88
  37. package/generator/src/codegen.js +29 -27
  38. package/generator/src/compatibility-key.js +3 -0
  39. package/generator/src/compile-elm.js +43 -26
  40. package/generator/src/config.js +2 -4
  41. package/generator/src/copy-dir.js +2 -2
  42. package/generator/src/dev-server.js +160 -102
  43. package/generator/src/dir-helpers.js +9 -26
  44. package/generator/src/elm-codegen.js +5 -4
  45. package/generator/src/elm-file-constants.js +2 -3
  46. package/generator/src/error-formatter.js +12 -11
  47. package/generator/src/file-helpers.js +3 -4
  48. package/generator/src/generate-template-module-connector.js +23 -23
  49. package/generator/src/init.js +9 -8
  50. package/generator/src/pre-render-html.js +10 -13
  51. package/generator/src/render-test.js +109 -0
  52. package/generator/src/render-worker.js +25 -28
  53. package/generator/src/render.js +320 -143
  54. package/generator/src/request-cache.js +265 -162
  55. package/generator/src/resolve-elm-module.js +64 -0
  56. package/generator/src/rewrite-client-elm-json.js +6 -5
  57. package/generator/src/rewrite-elm-json-help.js +56 -0
  58. package/generator/src/rewrite-elm-json.js +17 -7
  59. package/generator/src/route-codegen-helpers.js +16 -31
  60. package/generator/src/seo-renderer.js +1 -3
  61. package/generator/src/vite-utils.js +1 -2
  62. package/generator/static-code/elm-pages.js +10 -0
  63. package/generator/static-code/hmr.js +79 -13
  64. package/generator/template/app/Api.elm +3 -2
  65. package/generator/template/app/Effect.elm +155 -0
  66. package/generator/template/app/ErrorPage.elm +49 -6
  67. package/generator/template/app/Route/Blog/Slug_.elm +86 -0
  68. package/generator/template/app/Route/Greet.elm +107 -0
  69. package/generator/template/app/Route/Hello.elm +119 -0
  70. package/generator/template/app/Route/Index.elm +26 -25
  71. package/generator/template/app/Shared.elm +38 -39
  72. package/generator/template/app/Site.elm +4 -7
  73. package/generator/template/app/View.elm +9 -8
  74. package/generator/template/codegen/elm.codegen.json +18 -0
  75. package/generator/template/custom-backend-task.ts +3 -0
  76. package/generator/template/elm-pages.config.mjs +13 -0
  77. package/generator/template/elm-tooling.json +0 -3
  78. package/generator/template/elm.json +25 -20
  79. package/generator/template/index.ts +1 -2
  80. package/generator/template/netlify.toml +4 -1
  81. package/generator/template/package.json +10 -4
  82. package/generator/template/script/.elm-pages/compiled-ports/custom-backend-task.mjs +7 -0
  83. package/generator/template/script/custom-backend-task.ts +3 -0
  84. package/generator/template/script/elm.json +61 -0
  85. package/generator/template/script/src/AddRoute.elm +312 -0
  86. package/generator/template/script/src/Stars.elm +42 -0
  87. package/package.json +30 -27
  88. package/src/ApiRoute.elm +249 -82
  89. package/src/BackendTask/Custom.elm +325 -0
  90. package/src/BackendTask/Env.elm +90 -0
  91. package/src/{DataSource → BackendTask}/File.elm +171 -56
  92. package/src/{DataSource → BackendTask}/Glob.elm +136 -125
  93. package/src/BackendTask/Http.elm +679 -0
  94. package/src/{DataSource → BackendTask}/Internal/Glob.elm +1 -1
  95. package/src/BackendTask/Internal/Request.elm +69 -0
  96. package/src/BackendTask/Random.elm +79 -0
  97. package/src/BackendTask/Time.elm +47 -0
  98. package/src/BackendTask.elm +531 -0
  99. package/src/FatalError.elm +90 -0
  100. package/src/FormData.elm +21 -18
  101. package/src/Head/Seo.elm +4 -4
  102. package/src/Head.elm +112 -8
  103. package/src/Internal/ApiRoute.elm +7 -5
  104. package/src/Internal/Request.elm +84 -4
  105. package/src/PageServerResponse.elm +6 -1
  106. package/src/Pages/ConcurrentSubmission.elm +127 -0
  107. package/src/Pages/Form.elm +340 -0
  108. package/src/Pages/FormData.elm +19 -0
  109. package/src/Pages/GeneratorProgramConfig.elm +15 -0
  110. package/src/Pages/Internal/FatalError.elm +5 -0
  111. package/src/Pages/Internal/Msg.elm +93 -0
  112. package/src/Pages/Internal/NotFoundReason.elm +4 -4
  113. package/src/Pages/Internal/Platform/Cli.elm +586 -768
  114. package/src/Pages/Internal/Platform/CompatibilityKey.elm +1 -1
  115. package/src/Pages/Internal/Platform/Effect.elm +1 -2
  116. package/src/Pages/Internal/Platform/GeneratorApplication.elm +379 -0
  117. package/src/Pages/Internal/Platform/StaticResponses.elm +65 -276
  118. package/src/Pages/Internal/Platform/ToJsPayload.elm +6 -9
  119. package/src/Pages/Internal/Platform.elm +330 -203
  120. package/src/Pages/Internal/ResponseSketch.elm +2 -2
  121. package/src/Pages/Internal/Script.elm +17 -0
  122. package/src/Pages/Internal/StaticHttpBody.elm +35 -1
  123. package/src/Pages/Manifest.elm +52 -11
  124. package/src/Pages/Navigation.elm +85 -0
  125. package/src/Pages/PageUrl.elm +26 -12
  126. package/src/Pages/ProgramConfig.elm +32 -22
  127. package/src/Pages/Script.elm +166 -0
  128. package/src/Pages/SiteConfig.elm +3 -2
  129. package/src/Pages/StaticHttp/Request.elm +2 -2
  130. package/src/Pages/StaticHttpRequest.elm +23 -99
  131. package/src/Pages/Url.elm +3 -3
  132. package/src/PagesMsg.elm +88 -0
  133. package/src/QueryParams.elm +21 -172
  134. package/src/RenderRequest.elm +7 -7
  135. package/src/RequestsAndPending.elm +37 -20
  136. package/src/Result/Extra.elm +26 -0
  137. package/src/Scaffold/Form.elm +569 -0
  138. package/src/Scaffold/Route.elm +1431 -0
  139. package/src/Server/Request.elm +476 -1001
  140. package/src/Server/Response.elm +130 -36
  141. package/src/Server/Session.elm +181 -111
  142. package/src/Server/SetCookie.elm +80 -32
  143. package/src/Stub.elm +53 -0
  144. package/src/Test/Html/Internal/ElmHtml/ToString.elm +8 -9
  145. package/src/{Path.elm → UrlPath.elm} +33 -36
  146. package/generator/template/public/images/icon-png.png +0 -0
  147. package/src/DataSource/Env.elm +0 -38
  148. package/src/DataSource/Http.elm +0 -446
  149. package/src/DataSource/Internal/Request.elm +0 -20
  150. package/src/DataSource/Port.elm +0 -90
  151. package/src/DataSource.elm +0 -546
  152. package/src/Form/Field.elm +0 -717
  153. package/src/Form/FieldStatus.elm +0 -36
  154. package/src/Form/FieldView.elm +0 -417
  155. package/src/Form/FormData.elm +0 -22
  156. package/src/Form/Validation.elm +0 -391
  157. package/src/Form/Value.elm +0 -118
  158. package/src/Form.elm +0 -1683
  159. package/src/FormDecoder.elm +0 -102
  160. package/src/Pages/FormState.elm +0 -256
  161. package/src/Pages/Generate.elm +0 -1242
  162. package/src/Pages/Internal/Form.elm +0 -17
  163. package/src/Pages/Internal/Platform/Cli.elm.bak +0 -1276
  164. package/src/Pages/Msg.elm +0 -79
  165. package/src/Pages/Transition.elm +0 -70
@@ -0,0 +1,69 @@
1
+ module BackendTask.Internal.Request exposing (request, request2)
2
+
3
+ import BackendTask exposing (BackendTask)
4
+ import BackendTask.Http exposing (Body, Expect)
5
+ import Json.Decode exposing (Decoder)
6
+ import Json.Encode as Encode
7
+
8
+
9
+ request :
10
+ { name : String
11
+ , body : Body
12
+ , expect : Expect a
13
+ }
14
+ -> BackendTask error a
15
+ request ({ name, body, expect } as params) =
16
+ -- elm-review: known-unoptimized-recursion
17
+ BackendTask.Http.request
18
+ { url = "elm-pages-internal://" ++ name
19
+ , method = "GET"
20
+ , headers = []
21
+ , body = body
22
+ , timeoutInMs = Nothing
23
+ , retries = Nothing
24
+ }
25
+ expect
26
+ |> BackendTask.onError
27
+ (\_ ->
28
+ -- TODO avoid crash here, this should be handled as an internal error
29
+ request params
30
+ )
31
+
32
+
33
+ request2 :
34
+ { name : String
35
+ , body : Body
36
+ , expect : Decoder a
37
+ , errorDecoder : Decoder error
38
+ , onError : Json.Decode.Error -> error
39
+ }
40
+ -> BackendTask error a
41
+ request2 { name, body, expect, onError, errorDecoder } =
42
+ -- elm-review: known-unoptimized-recursion
43
+ BackendTask.Http.request
44
+ { url = "elm-pages-internal://" ++ name
45
+ , method = "GET"
46
+ , headers = []
47
+ , body = body
48
+ , timeoutInMs = Nothing
49
+ , retries = Nothing
50
+ }
51
+ (BackendTask.Http.expectJson Json.Decode.value)
52
+ |> BackendTask.onError
53
+ (\_ ->
54
+ BackendTask.succeed Encode.null
55
+ )
56
+ |> BackendTask.andThen
57
+ (\decodeValue ->
58
+ case Json.Decode.decodeValue errorDecoder decodeValue of
59
+ Ok a ->
60
+ BackendTask.fail a
61
+
62
+ Err _ ->
63
+ case Json.Decode.decodeValue expect decodeValue of
64
+ Ok a ->
65
+ BackendTask.succeed a
66
+
67
+ Err e ->
68
+ BackendTask.fail (onError e)
69
+ )
@@ -0,0 +1,79 @@
1
+ module BackendTask.Random exposing
2
+ ( generate
3
+ , int32
4
+ )
5
+
6
+ {-|
7
+
8
+ @docs generate
9
+
10
+ @docs int32
11
+
12
+ -}
13
+
14
+ import BackendTask exposing (BackendTask)
15
+ import BackendTask.Http
16
+ import BackendTask.Internal.Request
17
+ import Json.Decode as Decode
18
+ import Json.Encode as Encode
19
+ import Random
20
+
21
+
22
+ {-| Takes an `elm/random` `Random.Generator` and runs it using a randomly generated initial seed.
23
+
24
+ type alias Data =
25
+ { randomData : ( Int, Float )
26
+ }
27
+
28
+ data : BackendTask FatalError Data
29
+ data =
30
+ BackendTask.map Data
31
+ (BackendTask.Random.generate generator)
32
+
33
+ generator : Random.Generator ( Int, Float )
34
+ generator =
35
+ Random.map2 Tuple.pair (Random.int 0 100) (Random.float 0 100)
36
+
37
+ The random initial seed is generated using <https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues>
38
+ to generate a single 32-bit Integer. That 32-bit Integer is then used with `Random.initialSeed` to create an Elm Random.Seed value.
39
+ Then that `Seed` used to run the `Generator`.
40
+
41
+ Note that this is different than `elm/random`'s `Random.generate`. This difference shouldn't be problematic, and in fact the `BackendTask`
42
+ random seed generation is more cryptographically independent because you can't determine the
43
+ random seed based solely on the time at which it is run. Each time you call `BackendTask.generate` it uses a newly
44
+ generated random seed to run the `Random.Generator` that is passed in. In contrast, `elm/random`'s `Random.generate`
45
+ generates an initial seed using `Time.now`, and then continues with that same seed using using [`Random.step`](https://package.elm-lang.org/packages/elm/random/latest/Random#step)
46
+ to get new random values after that. You can [see the implementation here](https://github.com/elm/random/blob/c1c9da4d861363cee1c93382d2687880279ed0dd/src/Random.elm#L865-L896).
47
+ However, `elm/random` is still not suitable in general for cryptographic uses of random because it uses 32-bits for when it
48
+ steps through new seeds while running a single `Random.Generator`.
49
+
50
+ -}
51
+ generate : Random.Generator value -> BackendTask error value
52
+ generate generator =
53
+ int32
54
+ |> BackendTask.map
55
+ (Random.initialSeed
56
+ >> Random.step generator
57
+ >> Tuple.first
58
+ )
59
+
60
+
61
+ {-| Gives a random 32-bit Int. This can be useful if you want to do low-level things with a cryptographically sound
62
+ random 32-bit integer.
63
+
64
+ The value comes from running this code in Node using <https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues>:
65
+
66
+ ```js
67
+ import * as crypto from "node:crypto";
68
+
69
+ crypto.getRandomValues(new Uint32Array(1))[0]
70
+ ```
71
+
72
+ -}
73
+ int32 : BackendTask error Int
74
+ int32 =
75
+ BackendTask.Internal.Request.request
76
+ { name = "randomSeed"
77
+ , body = BackendTask.Http.jsonBody Encode.null
78
+ , expect = BackendTask.Http.expectJson Decode.int
79
+ }
@@ -0,0 +1,47 @@
1
+ module BackendTask.Time exposing (now)
2
+
3
+ {-|
4
+
5
+ @docs now
6
+
7
+ -}
8
+
9
+ import BackendTask exposing (BackendTask)
10
+ import BackendTask.Http
11
+ import BackendTask.Internal.Request
12
+ import Json.Decode as Decode
13
+ import Json.Encode as Encode
14
+ import Time
15
+
16
+
17
+ {-| Gives a `Time.Posix` of when the `BackendTask` executes.
18
+
19
+ type alias Data =
20
+ { time : Time.Posix
21
+ }
22
+
23
+ data : BackendTask FatalError Data
24
+ data =
25
+ BackendTask.map Data
26
+ BackendTask.Time.now
27
+
28
+ It's better to use [`Server.Request.requestTime`](Server-Request#requestTime) or `Pages.builtAt` when those are the semantics
29
+ you are looking for. `requestTime` gives you a single reliable and consistent time for when the incoming HTTP request was received in
30
+ a server-rendered Route or server-rendered API Route. `Pages.builtAt` gives a single reliable and consistent time when the
31
+ site was built.
32
+
33
+ `BackendTask.Time.now` gives you the time that it happened to execute, which might give you what you need, but be
34
+ aware that the time you get is dependent on how BackendTask's are scheduled and executed internally in elm-pages, and
35
+ its best to avoid depending on that variation when possible.
36
+
37
+ -}
38
+ now : BackendTask error Time.Posix
39
+ now =
40
+ BackendTask.Internal.Request.request
41
+ { name = "now"
42
+ , body =
43
+ BackendTask.Http.jsonBody Encode.null
44
+ , expect =
45
+ BackendTask.Http.expectJson
46
+ (Decode.int |> Decode.map Time.millisToPosix)
47
+ }