elm-pages 3.0.0-beta.4 → 3.0.0-beta.40
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/adapter/netlify.js +207 -0
- package/codegen/{elm-pages-codegen.js → elm-pages-codegen.cjs} +2678 -2725
- 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 +1447 -342
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +17004 -13817
- 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 +4 -4
- package/generator/dead-code-review/elm.json +9 -7
- package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +59 -10
- package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +52 -36
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -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 +1447 -342
- package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +25025 -21739
- 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 +4 -4
- package/generator/review/elm.json +10 -10
- package/generator/src/RouteBuilder.elm +115 -109
- package/generator/src/SharedTemplate.elm +3 -2
- package/generator/src/SiteConfig.elm +3 -2
- package/generator/src/basepath-middleware.js +3 -3
- package/generator/src/build.js +209 -92
- package/generator/src/cli.js +292 -88
- package/generator/src/codegen.js +29 -27
- package/generator/src/compatibility-key.js +3 -0
- package/generator/src/compile-elm.js +43 -26
- package/generator/src/config.js +39 -0
- package/generator/src/copy-dir.js +2 -2
- package/generator/src/dev-server.js +176 -138
- package/generator/src/dir-helpers.js +9 -26
- package/generator/src/elm-codegen.js +5 -4
- package/generator/src/elm-file-constants.js +2 -3
- package/generator/src/error-formatter.js +12 -11
- package/generator/src/file-helpers.js +3 -4
- package/generator/src/generate-template-module-connector.js +23 -23
- package/generator/src/init.js +9 -8
- package/generator/src/pre-render-html.js +39 -28
- package/generator/src/render-test.js +109 -0
- package/generator/src/render-worker.js +25 -28
- package/generator/src/render.js +321 -142
- package/generator/src/request-cache.js +265 -162
- package/generator/src/resolve-elm-module.js +64 -0
- package/generator/src/rewrite-client-elm-json.js +6 -5
- package/generator/src/rewrite-elm-json-help.js +56 -0
- package/generator/src/rewrite-elm-json.js +17 -7
- package/generator/src/route-codegen-helpers.js +16 -31
- package/generator/src/seo-renderer.js +12 -7
- package/generator/src/vite-utils.js +77 -0
- package/generator/static-code/elm-pages.js +10 -0
- package/generator/static-code/hmr.js +79 -13
- package/generator/template/app/Api.elm +6 -5
- package/generator/template/app/Effect.elm +123 -0
- package/generator/template/app/ErrorPage.elm +37 -6
- package/generator/template/app/Route/Index.elm +17 -10
- package/generator/template/app/Shared.elm +24 -47
- package/generator/template/app/Site.elm +19 -6
- package/generator/template/app/View.elm +1 -8
- package/generator/template/elm-tooling.json +0 -3
- package/generator/template/elm.json +32 -24
- package/generator/template/package.json +10 -4
- package/package.json +30 -27
- package/src/ApiRoute.elm +199 -61
- package/src/BackendTask/Custom.elm +325 -0
- package/src/BackendTask/Env.elm +90 -0
- package/src/{DataSource → BackendTask}/File.elm +171 -56
- package/src/{DataSource → BackendTask}/Glob.elm +136 -125
- package/src/BackendTask/Http.elm +679 -0
- package/src/{DataSource → BackendTask}/Internal/Glob.elm +1 -1
- package/src/BackendTask/Internal/Request.elm +69 -0
- package/src/BackendTask/Random.elm +79 -0
- package/src/BackendTask/Time.elm +47 -0
- package/src/BackendTask.elm +537 -0
- package/src/FatalError.elm +90 -0
- package/src/Head.elm +237 -7
- package/src/HtmlPrinter.elm +7 -3
- package/src/Internal/ApiRoute.elm +7 -5
- package/src/PageServerResponse.elm +6 -1
- package/src/Pages/Form.elm +229 -0
- package/src/Pages/GeneratorProgramConfig.elm +15 -0
- package/src/Pages/Internal/FatalError.elm +5 -0
- package/src/Pages/Internal/Msg.elm +93 -0
- package/src/Pages/Internal/Platform/Cli.elm +612 -763
- package/src/Pages/Internal/Platform/CompatibilityKey.elm +6 -0
- package/src/Pages/Internal/Platform/Effect.elm +1 -2
- package/src/Pages/Internal/Platform/GeneratorApplication.elm +379 -0
- package/src/Pages/Internal/Platform/StaticResponses.elm +65 -276
- package/src/Pages/Internal/Platform/ToJsPayload.elm +6 -9
- package/src/Pages/Internal/Platform.elm +327 -194
- package/src/Pages/Internal/Script.elm +17 -0
- package/src/Pages/Internal/StaticHttpBody.elm +35 -1
- package/src/Pages/Manifest.elm +29 -4
- package/src/Pages/PageUrl.elm +23 -9
- package/src/Pages/ProgramConfig.elm +26 -15
- package/src/Pages/Script.elm +109 -0
- package/src/Pages/SiteConfig.elm +3 -2
- package/src/Pages/StaticHttp/Request.elm +2 -2
- package/src/Pages/StaticHttpRequest.elm +23 -99
- package/src/Pages/Transition.elm +12 -3
- package/src/PagesMsg.elm +82 -0
- package/src/Path.elm +16 -19
- package/src/QueryParams.elm +21 -172
- package/src/RequestsAndPending.elm +37 -20
- package/src/Result/Extra.elm +26 -0
- package/src/Scaffold/Form.elm +546 -0
- package/src/Scaffold/Route.elm +1402 -0
- package/src/Server/Request.elm +73 -72
- package/src/Server/Session.elm +62 -42
- package/src/Server/SetCookie.elm +12 -4
- package/src/Stub.elm +53 -0
- package/src/Test/Html/Internal/ElmHtml/ToString.elm +8 -9
- package/src/DataSource/Env.elm +0 -38
- package/src/DataSource/Http.elm +0 -446
- package/src/DataSource/Internal/Request.elm +0 -20
- package/src/DataSource/Port.elm +0 -90
- package/src/DataSource.elm +0 -538
- package/src/Form/Field.elm +0 -717
- package/src/Form/FieldStatus.elm +0 -36
- package/src/Form/FieldView.elm +0 -417
- package/src/Form/FormData.elm +0 -22
- package/src/Form/Validation.elm +0 -391
- package/src/Form/Value.elm +0 -118
- package/src/Form.elm +0 -1683
- package/src/FormDecoder.elm +0 -102
- package/src/Pages/FormState.elm +0 -256
- package/src/Pages/Generate.elm +0 -800
- package/src/Pages/Internal/Form.elm +0 -17
- package/src/Pages/Msg.elm +0 -79
|
@@ -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
|
+
}
|