elm-pages 2.1.11 → 3.0.0-beta.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 (136) hide show
  1. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
  2. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
  3. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
  4. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
  5. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmi +0 -0
  6. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmo +0 -0
  7. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
  8. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
  9. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
  10. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmo +0 -0
  11. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  12. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  13. package/generator/{template/public/style.css → review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock} +0 -0
  14. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  15. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -0
  16. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
  17. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +27617 -0
  18. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
  19. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
  20. package/generator/review/elm-stuff/tests-0.19.1/js/package.json +1 -0
  21. package/generator/review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
  22. package/generator/review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
  23. package/generator/review/elm.json +13 -4
  24. package/{src → generator/review/src}/Pages/Review/NoContractViolations.elm +148 -148
  25. package/generator/review/tests/Pages/Review/NoContractViolationsTest.elm +331 -0
  26. package/generator/src/RouteBuilder.elm +420 -0
  27. package/generator/src/SharedTemplate.elm +4 -5
  28. package/generator/src/SiteConfig.elm +3 -9
  29. package/generator/src/build.js +308 -95
  30. package/generator/src/cli.js +103 -8
  31. package/generator/src/codegen.js +192 -35
  32. package/generator/src/compile-elm.js +183 -31
  33. package/generator/src/dev-server.js +353 -96
  34. package/generator/src/elm-application.json +3 -1
  35. package/generator/src/elm-codegen.js +34 -0
  36. package/generator/src/elm-file-constants.js +2 -0
  37. package/generator/src/error-formatter.js +20 -1
  38. package/generator/src/generate-template-module-connector.js +120 -924
  39. package/generator/src/hello.ts +5 -0
  40. package/generator/src/pre-render-html.js +58 -104
  41. package/generator/src/render-worker.js +27 -13
  42. package/generator/src/render.js +252 -197
  43. package/generator/src/request-cache-fs.js +18 -0
  44. package/generator/src/request-cache.js +128 -56
  45. package/generator/src/rewrite-client-elm-json.js +49 -0
  46. package/generator/src/route-codegen-helpers.js +62 -1
  47. package/generator/static-code/dev-style.css +22 -0
  48. package/generator/static-code/elm-pages.js +43 -39
  49. package/generator/static-code/hmr.js +98 -88
  50. package/generator/template/app/Api.elm +25 -0
  51. package/generator/template/app/ErrorPage.elm +38 -0
  52. package/generator/template/app/Route/Index.elm +87 -0
  53. package/generator/template/{src → app}/Shared.elm +34 -13
  54. package/generator/template/app/Site.elm +19 -0
  55. package/generator/template/{src → app}/View.elm +0 -0
  56. package/generator/template/elm-pages.config.mjs +5 -0
  57. package/generator/template/elm.json +1 -0
  58. package/generator/template/{public/index.js → index.ts} +7 -3
  59. package/generator/template/package.json +4 -4
  60. package/generator/template/public/favicon.ico +0 -0
  61. package/generator/template/public/images/icon-png.png +0 -0
  62. package/generator/template/src/.gitkeep +0 -0
  63. package/generator/template/style.css +4 -0
  64. package/package.json +30 -23
  65. package/src/ApiRoute.elm +176 -43
  66. package/src/BuildError.elm +10 -1
  67. package/src/CookieParser.elm +84 -0
  68. package/src/DataSource/Env.elm +38 -0
  69. package/src/DataSource/File.elm +27 -16
  70. package/src/DataSource/Glob.elm +126 -80
  71. package/src/DataSource/Http.elm +283 -304
  72. package/src/DataSource/Internal/Glob.elm +5 -21
  73. package/src/DataSource/Internal/Request.elm +25 -0
  74. package/src/DataSource/Port.elm +17 -14
  75. package/src/DataSource.elm +55 -318
  76. package/src/Form/Field.elm +717 -0
  77. package/src/Form/FieldStatus.elm +36 -0
  78. package/src/Form/FieldView.elm +417 -0
  79. package/src/Form/FormData.elm +22 -0
  80. package/src/Form/Validation.elm +391 -0
  81. package/src/Form/Value.elm +118 -0
  82. package/src/Form.elm +1683 -0
  83. package/src/FormData.elm +58 -0
  84. package/src/FormDecoder.elm +102 -0
  85. package/src/Head/Seo.elm +12 -4
  86. package/src/Head.elm +12 -2
  87. package/src/HtmlPrinter.elm +1 -1
  88. package/src/Internal/ApiRoute.elm +17 -4
  89. package/src/Internal/Request.elm +7 -0
  90. package/src/PageServerResponse.elm +68 -0
  91. package/src/Pages/ContentCache.elm +1 -229
  92. package/src/Pages/Fetcher.elm +58 -0
  93. package/src/Pages/FormState.elm +256 -0
  94. package/src/Pages/Generate.elm +800 -0
  95. package/src/Pages/Internal/Form.elm +17 -0
  96. package/src/Pages/Internal/NotFoundReason.elm +3 -55
  97. package/src/Pages/Internal/Platform/Cli.elm +777 -579
  98. package/src/Pages/Internal/Platform/Effect.elm +5 -5
  99. package/src/Pages/Internal/Platform/StaticResponses.elm +178 -394
  100. package/src/Pages/Internal/Platform/ToJsPayload.elm +24 -23
  101. package/src/Pages/Internal/Platform.elm +1244 -504
  102. package/src/Pages/Internal/ResponseSketch.elm +19 -0
  103. package/src/Pages/Internal/RoutePattern.elm +596 -45
  104. package/src/Pages/Manifest.elm +26 -0
  105. package/src/Pages/Msg.elm +79 -0
  106. package/src/Pages/ProgramConfig.elm +67 -14
  107. package/src/Pages/SiteConfig.elm +3 -6
  108. package/src/Pages/StaticHttp/Request.elm +4 -2
  109. package/src/Pages/StaticHttpRequest.elm +50 -215
  110. package/src/Pages/Transition.elm +70 -0
  111. package/src/Path.elm +1 -0
  112. package/src/Pattern.elm +98 -0
  113. package/src/RenderRequest.elm +2 -2
  114. package/src/RequestsAndPending.elm +111 -9
  115. package/src/Server/Request.elm +1253 -0
  116. package/src/Server/Response.elm +292 -0
  117. package/src/Server/Session.elm +316 -0
  118. package/src/Server/SetCookie.elm +169 -0
  119. package/src/TerminalText.elm +1 -1
  120. package/src/Test/Html/Internal/ElmHtml/Markdown.elm +0 -1
  121. package/src/Test/Html/Internal/ElmHtml/ToString.elm +1 -1
  122. package/generator/src/Page.elm +0 -359
  123. package/generator/src/codegen-template-module.js +0 -183
  124. package/generator/src/elm-pages-js-minified.js +0 -1
  125. package/generator/template/src/Api.elm +0 -14
  126. package/generator/template/src/Page/Index.elm +0 -69
  127. package/generator/template/src/Site.elm +0 -41
  128. package/src/DataSource/ServerRequest.elm +0 -60
  129. package/src/Internal/OptimizedDecoder.elm +0 -18
  130. package/src/KeepOrDiscard.elm +0 -6
  131. package/src/OptimizedDecoder/Pipeline.elm +0 -335
  132. package/src/OptimizedDecoder.elm +0 -818
  133. package/src/Pages/Internal/ApplicationType.elm +0 -6
  134. package/src/Pages/Secrets.elm +0 -83
  135. package/src/Secrets.elm +0 -111
  136. package/src/SecretsDict.elm +0 -45
@@ -0,0 +1,70 @@
1
+ module Pages.Transition exposing
2
+ ( Transition(..), LoadingState(..), map
3
+ , FetcherState, FetcherSubmitStatus(..)
4
+ )
5
+
6
+ {-|
7
+
8
+ @docs Transition, LoadingState, map
9
+
10
+
11
+ ## Fetchers
12
+
13
+ @docs FetcherState, FetcherSubmitStatus
14
+
15
+ -}
16
+
17
+ import Form.FormData exposing (FormData)
18
+ import Path exposing (Path)
19
+ import Time
20
+
21
+
22
+ {-| -}
23
+ type Transition
24
+ = Submitting FormData
25
+ | LoadAfterSubmit FormData Path LoadingState
26
+ | Loading Path LoadingState
27
+
28
+
29
+ {-| -}
30
+ type LoadingState
31
+ = Redirecting
32
+ | Load
33
+ | ActionRedirect
34
+
35
+
36
+ {-| -}
37
+ type alias FetcherState actionData =
38
+ { status : FetcherSubmitStatus actionData
39
+ , payload : FormData
40
+ , initiatedAt : Time.Posix
41
+ }
42
+
43
+
44
+ {-| -}
45
+ type FetcherSubmitStatus actionData
46
+ = FetcherSubmitting
47
+ | FetcherReloading actionData
48
+ | FetcherComplete actionData
49
+
50
+
51
+ {-| -}
52
+ map : (a -> b) -> FetcherState a -> FetcherState b
53
+ map mapFn fetcherState =
54
+ { status = mapStatus mapFn fetcherState.status
55
+ , payload = fetcherState.payload
56
+ , initiatedAt = fetcherState.initiatedAt
57
+ }
58
+
59
+
60
+ mapStatus : (a -> b) -> FetcherSubmitStatus a -> FetcherSubmitStatus b
61
+ mapStatus mapFn fetcherSubmitStatus =
62
+ case fetcherSubmitStatus of
63
+ FetcherSubmitting ->
64
+ FetcherSubmitting
65
+
66
+ FetcherReloading value ->
67
+ FetcherReloading (mapFn value)
68
+
69
+ FetcherComplete value ->
70
+ FetcherComplete (mapFn value)
package/src/Path.elm CHANGED
@@ -50,6 +50,7 @@ multi-part path part, like `blog/post-1`.
50
50
  join : List String -> Path
51
51
  join parts =
52
52
  parts
53
+ |> List.filter (\segment -> segment /= "/")
53
54
  |> List.map normalize
54
55
  |> String.join "/"
55
56
  |> Path
@@ -0,0 +1,98 @@
1
+ module Pattern exposing (Pattern(..), Segment(..), State(..), addCapture, addLiteral, addSlash, empty, toJson)
2
+
3
+ import Json.Encode
4
+
5
+
6
+ toJson : Pattern -> Json.Encode.Value
7
+ toJson (Pattern segments _) =
8
+ Json.Encode.list segmentToJson segments
9
+
10
+
11
+ segmentToJson : Segment -> Json.Encode.Value
12
+ segmentToJson segment =
13
+ -- elm-review: known-unoptimized-recursion
14
+ case segment of
15
+ Literal literalString ->
16
+ Json.Encode.object
17
+ [ ( "kind", Json.Encode.string "literal" )
18
+ , ( "value", Json.Encode.string literalString )
19
+ ]
20
+
21
+ Dynamic ->
22
+ Json.Encode.object
23
+ [ ( "kind", Json.Encode.string "dynamic" )
24
+ ]
25
+
26
+ HybridSegment ( first, second, rest ) ->
27
+ Json.Encode.object
28
+ [ ( "kind", Json.Encode.string "hybrid" )
29
+ , ( "value", Json.Encode.list segmentToJson (first :: second :: rest) )
30
+ ]
31
+
32
+
33
+ empty : Pattern
34
+ empty =
35
+ Pattern [] NoPendingSlash
36
+
37
+
38
+ addSlash : Pattern -> Pattern
39
+ addSlash (Pattern segments _) =
40
+ Pattern segments PendingSlash
41
+
42
+
43
+ addCapture : Pattern -> Pattern
44
+ addCapture (Pattern segments state) =
45
+ case state of
46
+ PendingSlash ->
47
+ Pattern (segments ++ [ Dynamic ]) NoPendingSlash
48
+
49
+ NoPendingSlash ->
50
+ case segments |> List.reverse of
51
+ [] ->
52
+ Pattern [ Dynamic ] NoPendingSlash
53
+
54
+ last :: rest ->
55
+ Pattern (List.reverse rest ++ [ HybridSegment ( last, Dynamic, [] ) ]) NoPendingSlash
56
+
57
+
58
+ addLiteral : String -> Pattern -> Pattern
59
+ addLiteral newLiteral (Pattern segments state) =
60
+ case state of
61
+ PendingSlash ->
62
+ Pattern
63
+ (segments ++ [ Literal newLiteral ])
64
+ NoPendingSlash
65
+
66
+ NoPendingSlash ->
67
+ case segments |> List.reverse of
68
+ (Literal literalSegment) :: rest ->
69
+ Pattern
70
+ (List.reverse rest ++ [ Literal (literalSegment ++ newLiteral) ])
71
+ NoPendingSlash
72
+
73
+ last :: rest ->
74
+ Pattern (List.reverse rest ++ [ HybridSegment ( last, Literal newLiteral, [] ) ]) NoPendingSlash
75
+
76
+ _ ->
77
+ Pattern
78
+ (segments ++ [ Literal newLiteral ])
79
+ state
80
+
81
+
82
+
83
+ --Pattern segments state
84
+
85
+
86
+ type Pattern
87
+ = Pattern (List Segment) State
88
+
89
+
90
+ type State
91
+ = PendingSlash
92
+ | NoPendingSlash
93
+
94
+
95
+ type Segment
96
+ = Literal String
97
+ | Dynamic
98
+ | HybridSegment ( Segment, Segment, List Segment )
@@ -49,7 +49,7 @@ type IncludeHtml
49
49
 
50
50
 
51
51
  decoder :
52
- ProgramConfig userMsg userModel (Maybe route) siteData pageData sharedData
52
+ ProgramConfig userMsg userModel (Maybe route) pageData actionData sharedData effect mappedMsg errorPage
53
53
  -> Decode.Decoder (RenderRequest (Maybe route))
54
54
  decoder config =
55
55
  Decode.field "request"
@@ -90,7 +90,7 @@ decoder config =
90
90
 
91
91
 
92
92
  requestPayloadDecoder :
93
- ProgramConfig userMsg userModel (Maybe route) siteData pageData sharedData
93
+ ProgramConfig userMsg userModel (Maybe route) pageData actionData sharedData effect mappedMsg errorPage
94
94
  -> Decode.Decoder (RequestPayload (Maybe route))
95
95
  requestPayloadDecoder config =
96
96
  (Decode.string
@@ -1,20 +1,122 @@
1
- module RequestsAndPending exposing (RequestsAndPending, decoder, get)
1
+ module RequestsAndPending exposing (RequestsAndPending, Response(..), ResponseBody(..), batchDecoder, bodyEncoder, decoder, get)
2
2
 
3
+ import Base64
4
+ import Bytes exposing (Bytes)
5
+ import Codec
3
6
  import Dict exposing (Dict)
4
- import Json.Decode as Decode
7
+ import Json.Decode as Decode exposing (Decoder)
8
+ import Json.Encode as Encode
9
+ import Pages.StaticHttp.Request
5
10
 
6
11
 
7
12
  type alias RequestsAndPending =
8
- Dict String (Maybe String)
13
+ Dict String (Maybe Response)
9
14
 
10
15
 
11
- get : String -> RequestsAndPending -> Maybe String
16
+ type ResponseBody
17
+ = BytesBody Bytes
18
+ | StringBody String
19
+ | JsonBody Decode.Value
20
+ | WhateverBody
21
+
22
+
23
+ batchDecoder : Decoder (List { request : Pages.StaticHttp.Request.Request, response : Response })
24
+ batchDecoder =
25
+ Decode.map2 (\request response -> { request = request, response = response })
26
+ (Decode.field "request"
27
+ (Pages.StaticHttp.Request.codec
28
+ |> Codec.decoder
29
+ )
30
+ )
31
+ (Decode.field "response" decoder)
32
+ |> Decode.list
33
+
34
+
35
+ decoder : Decoder Response
36
+ decoder =
37
+ Decode.map2 Response
38
+ (Decode.maybe responseDecoder)
39
+ bodyDecoder
40
+
41
+
42
+ bodyDecoder : Decoder ResponseBody
43
+ bodyDecoder =
44
+ Decode.field "bodyKind" Decode.string
45
+ |> Decode.andThen
46
+ (\bodyKind ->
47
+ Decode.field "body"
48
+ (case bodyKind of
49
+ "bytes" ->
50
+ Decode.string
51
+ |> Decode.andThen
52
+ (\base64String ->
53
+ base64String
54
+ |> Base64.toBytes
55
+ |> Maybe.map (BytesBody >> Decode.succeed)
56
+ |> Maybe.withDefault (Decode.fail "Couldn't parse base64 string into Bytes.")
57
+ )
58
+
59
+ "string" ->
60
+ Decode.string |> Decode.map StringBody
61
+
62
+ "json" ->
63
+ Decode.value |> Decode.map JsonBody
64
+
65
+ "whatever" ->
66
+ Decode.succeed WhateverBody
67
+
68
+ _ ->
69
+ Decode.fail "Unexpected bodyKind."
70
+ )
71
+ )
72
+
73
+
74
+ bodyEncoder : ResponseBody -> Encode.Value
75
+ bodyEncoder body =
76
+ (case body of
77
+ JsonBody jsonValue ->
78
+ ( "json", jsonValue )
79
+
80
+ StringBody string ->
81
+ ( "string", Encode.string string )
82
+
83
+ BytesBody _ ->
84
+ ( "Unhandled", Encode.null )
85
+
86
+ WhateverBody ->
87
+ ( "whatever", Encode.null )
88
+ )
89
+ |> (\( bodyKind, encodedBody ) ->
90
+ Encode.object
91
+ [ ( "bodyKind", Encode.string bodyKind )
92
+ , ( "body", encodedBody )
93
+ ]
94
+ )
95
+
96
+
97
+ type alias RawResponse =
98
+ { statusCode : Int
99
+ , statusText : String
100
+ , headers : Dict String String
101
+ , url : String
102
+ }
103
+
104
+
105
+ type Response
106
+ = Response (Maybe RawResponse) ResponseBody
107
+
108
+
109
+ responseDecoder : Decoder RawResponse
110
+ responseDecoder =
111
+ Decode.map4 RawResponse
112
+ (Decode.field "statusCode" Decode.int)
113
+ (Decode.field "statusText" Decode.string)
114
+ (Decode.field "headers" (Decode.dict Decode.string))
115
+ (Decode.field "url" Decode.string)
116
+
117
+
118
+ get : String -> RequestsAndPending -> Maybe Response
12
119
  get key requestsAndPending =
13
120
  requestsAndPending
14
121
  |> Dict.get key
15
122
  |> Maybe.andThen identity
16
-
17
-
18
- decoder : Decode.Decoder RequestsAndPending
19
- decoder =
20
- Decode.dict (Decode.string |> Decode.map Just)