elm-pages 3.0.0-beta.4 → 3.0.0-beta.41

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 (148) hide show
  1. package/README.md +10 -1
  2. package/adapter/netlify.js +207 -0
  3. package/codegen/{elm-pages-codegen.js → elm-pages-codegen.cjs} +2828 -2933
  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 +1447 -342
  12. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +17004 -13817
  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 +1447 -342
  27. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +25025 -21739
  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 +121 -114
  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 +209 -92
  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 +39 -0
  41. package/generator/src/copy-dir.js +2 -2
  42. package/generator/src/dev-server.js +176 -138
  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 +39 -28
  51. package/generator/src/render-test.js +109 -0
  52. package/generator/src/render-worker.js +25 -28
  53. package/generator/src/render.js +321 -142
  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 +12 -7
  61. package/generator/src/vite-utils.js +77 -0
  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 +6 -5
  65. package/generator/template/app/Effect.elm +123 -0
  66. package/generator/template/app/ErrorPage.elm +37 -6
  67. package/generator/template/app/Route/Index.elm +17 -10
  68. package/generator/template/app/Shared.elm +24 -47
  69. package/generator/template/app/Site.elm +19 -6
  70. package/generator/template/app/View.elm +1 -8
  71. package/generator/template/elm-tooling.json +0 -3
  72. package/generator/template/elm.json +32 -24
  73. package/generator/template/package.json +10 -4
  74. package/package.json +30 -27
  75. package/src/ApiRoute.elm +199 -61
  76. package/src/BackendTask/Custom.elm +325 -0
  77. package/src/BackendTask/Env.elm +90 -0
  78. package/src/{DataSource → BackendTask}/File.elm +171 -56
  79. package/src/{DataSource → BackendTask}/Glob.elm +136 -125
  80. package/src/BackendTask/Http.elm +679 -0
  81. package/src/{DataSource → BackendTask}/Internal/Glob.elm +1 -1
  82. package/src/BackendTask/Internal/Request.elm +69 -0
  83. package/src/BackendTask/Random.elm +79 -0
  84. package/src/BackendTask/Time.elm +47 -0
  85. package/src/BackendTask.elm +531 -0
  86. package/src/FatalError.elm +90 -0
  87. package/src/Head/Seo.elm +4 -4
  88. package/src/Head.elm +237 -7
  89. package/src/HtmlPrinter.elm +7 -3
  90. package/src/Internal/ApiRoute.elm +7 -5
  91. package/src/PageServerResponse.elm +6 -1
  92. package/src/Pages/ConcurrentSubmission.elm +127 -0
  93. package/src/Pages/Form.elm +340 -0
  94. package/src/Pages/FormData.elm +18 -0
  95. package/src/Pages/GeneratorProgramConfig.elm +15 -0
  96. package/src/Pages/Internal/FatalError.elm +5 -0
  97. package/src/Pages/Internal/Msg.elm +93 -0
  98. package/src/Pages/Internal/NotFoundReason.elm +4 -4
  99. package/src/Pages/Internal/Platform/Cli.elm +617 -768
  100. package/src/Pages/Internal/Platform/CompatibilityKey.elm +6 -0
  101. package/src/Pages/Internal/Platform/Effect.elm +1 -2
  102. package/src/Pages/Internal/Platform/GeneratorApplication.elm +379 -0
  103. package/src/Pages/Internal/Platform/StaticResponses.elm +65 -276
  104. package/src/Pages/Internal/Platform/ToJsPayload.elm +6 -9
  105. package/src/Pages/Internal/Platform.elm +359 -225
  106. package/src/Pages/Internal/ResponseSketch.elm +2 -2
  107. package/src/Pages/Internal/Script.elm +17 -0
  108. package/src/Pages/Internal/StaticHttpBody.elm +35 -1
  109. package/src/Pages/Manifest.elm +52 -11
  110. package/src/Pages/Navigation.elm +87 -0
  111. package/src/Pages/PageUrl.elm +26 -12
  112. package/src/Pages/ProgramConfig.elm +35 -23
  113. package/src/Pages/Script.elm +166 -0
  114. package/src/Pages/SiteConfig.elm +3 -2
  115. package/src/Pages/StaticHttp/Request.elm +2 -2
  116. package/src/Pages/StaticHttpRequest.elm +23 -99
  117. package/src/Pages/Url.elm +3 -3
  118. package/src/PagesMsg.elm +88 -0
  119. package/src/QueryParams.elm +21 -172
  120. package/src/RenderRequest.elm +7 -7
  121. package/src/RequestsAndPending.elm +37 -20
  122. package/src/Result/Extra.elm +26 -0
  123. package/src/Scaffold/Form.elm +569 -0
  124. package/src/Scaffold/Route.elm +1411 -0
  125. package/src/Server/Request.elm +74 -72
  126. package/src/Server/Session.elm +62 -42
  127. package/src/Server/SetCookie.elm +80 -32
  128. package/src/Stub.elm +53 -0
  129. package/src/Test/Html/Internal/ElmHtml/ToString.elm +8 -9
  130. package/src/{Path.elm → UrlPath.elm} +33 -36
  131. package/src/DataSource/Env.elm +0 -38
  132. package/src/DataSource/Http.elm +0 -446
  133. package/src/DataSource/Internal/Request.elm +0 -20
  134. package/src/DataSource/Port.elm +0 -90
  135. package/src/DataSource.elm +0 -538
  136. package/src/Form/Field.elm +0 -717
  137. package/src/Form/FieldStatus.elm +0 -36
  138. package/src/Form/FieldView.elm +0 -417
  139. package/src/Form/FormData.elm +0 -22
  140. package/src/Form/Validation.elm +0 -391
  141. package/src/Form/Value.elm +0 -118
  142. package/src/Form.elm +0 -1683
  143. package/src/FormDecoder.elm +0 -102
  144. package/src/Pages/FormState.elm +0 -256
  145. package/src/Pages/Generate.elm +0 -800
  146. package/src/Pages/Internal/Form.elm +0 -17
  147. package/src/Pages/Msg.elm +0 -79
  148. package/src/Pages/Transition.elm +0 -70
@@ -1,102 +0,0 @@
1
- module FormDecoder exposing (encodeFormData, formDataOnSubmit, methodToString)
2
-
3
- import Form.FormData as FormData exposing (FormData)
4
- import Html
5
- import Html.Events
6
- import Json.Decode as Decode
7
- import Json.Encode
8
- import Url
9
-
10
-
11
- formDataOnSubmit : Html.Attribute FormData
12
- formDataOnSubmit =
13
- Html.Events.preventDefaultOn "submit"
14
- (Decode.map4 FormData
15
- (Decode.value
16
- |> Decode.andThen
17
- (\decodeValue ->
18
- case Decode.decodeValue tuplesDecoder (decoder decodeValue) of
19
- Ok decoded ->
20
- Decode.succeed decoded
21
-
22
- Err error ->
23
- Decode.succeed
24
- [ ( "error"
25
- , Decode.errorToString error
26
- )
27
- ]
28
- )
29
- )
30
- (currentForm "method" methodDecoder)
31
- (currentForm "action" Decode.string)
32
- (currentForm "id" (Decode.nullable Decode.string))
33
- |> Decode.map alwaysPreventDefault
34
- )
35
-
36
-
37
- currentForm : String -> Decode.Decoder a -> Decode.Decoder a
38
- currentForm field decoder_ =
39
- Decode.oneOf
40
- [ Decode.at [ "submitter", "form" ] decoder_
41
- , Decode.at [ "currentTarget", field ] decoder_
42
- ]
43
-
44
-
45
- methodDecoder : Decode.Decoder FormData.Method
46
- methodDecoder =
47
- Decode.string
48
- |> Decode.map
49
- (\methodString ->
50
- case methodString |> String.toUpper of
51
- "GET" ->
52
- FormData.Get
53
-
54
- "POST" ->
55
- FormData.Post
56
-
57
- _ ->
58
- -- TODO what about "dialog" method? Is it okay for that to be interpreted as GET,
59
- -- or should there be a variant for that?
60
- FormData.Get
61
- )
62
-
63
-
64
- decoder : Decode.Value -> Decode.Value
65
- decoder event =
66
- Json.Encode.string "REPLACE_ME_WITH_FORM_TO_STRING"
67
-
68
-
69
- alwaysPreventDefault : msg -> ( msg, Bool )
70
- alwaysPreventDefault msg =
71
- ( msg, True )
72
-
73
-
74
- tuplesDecoder : Decode.Decoder (List ( String, String ))
75
- tuplesDecoder =
76
- Decode.list
77
- (Decode.map2 Tuple.pair
78
- (Decode.index 0 Decode.string)
79
- (Decode.index 1 Decode.string)
80
- )
81
-
82
-
83
- methodToString : FormData.Method -> String
84
- methodToString method =
85
- case method of
86
- FormData.Get ->
87
- "GET"
88
-
89
- FormData.Post ->
90
- "POST"
91
-
92
-
93
- encodeFormData :
94
- FormData
95
- -> String
96
- encodeFormData data =
97
- data.fields
98
- |> List.map
99
- (\( name, value ) ->
100
- Url.percentEncode name ++ "=" ++ Url.percentEncode value
101
- )
102
- |> String.join "&"
@@ -1,256 +0,0 @@
1
- module Pages.FormState exposing (Event(..), FieldEvent, FieldState, FormState, PageFormState, init, listeners, setField, setSubmitAttempted, update)
2
-
3
- {-|
4
-
5
- @docs Event, FieldEvent, FieldState, FormState, PageFormState, init, listeners, setField, setSubmitAttempted, update
6
-
7
- -}
8
-
9
- import Dict exposing (Dict)
10
- import Form.FieldStatus as FieldStatus exposing (FieldStatus)
11
- import Html exposing (Attribute)
12
- import Html.Attributes as Attr
13
- import Html.Events
14
- import Json.Decode as Decode exposing (Decoder)
15
- import Pages.Msg
16
-
17
-
18
- {-| -}
19
- listeners : String -> List (Attribute (Pages.Msg.Msg userMsg))
20
- listeners formId =
21
- [ Html.Events.on "focusin" (Decode.value |> Decode.map Pages.Msg.FormFieldEvent)
22
- , Html.Events.on "focusout" (Decode.value |> Decode.map Pages.Msg.FormFieldEvent)
23
- , Html.Events.on "input" (Decode.value |> Decode.map Pages.Msg.FormFieldEvent)
24
- , Attr.id formId
25
- ]
26
-
27
-
28
- {-| -}
29
- type Event
30
- = InputEvent String
31
- | FocusEvent
32
- --| ChangeEvent
33
- | BlurEvent
34
-
35
-
36
- {-| -}
37
- type alias FieldEvent =
38
- { value : String
39
- , formId : String
40
- , name : String
41
- , event : Event
42
- }
43
-
44
-
45
- {-| -}
46
- fieldEventDecoder : Decoder FieldEvent
47
- fieldEventDecoder =
48
- Decode.map4 FieldEvent
49
- inputValueDecoder
50
- (Decode.at [ "currentTarget", "id" ] Decode.string)
51
- (Decode.at [ "target", "name" ] Decode.string)
52
- fieldDecoder
53
-
54
-
55
- {-| -}
56
- inputValueDecoder : Decoder String
57
- inputValueDecoder =
58
- Decode.at [ "target", "type" ] Decode.string
59
- |> Decode.andThen
60
- (\targetType ->
61
- case targetType of
62
- "checkbox" ->
63
- Decode.map2
64
- (\valueWhenChecked isChecked ->
65
- if isChecked then
66
- valueWhenChecked
67
-
68
- else
69
- ""
70
- )
71
- (Decode.at [ "target", "value" ] Decode.string)
72
- (Decode.at [ "target", "checked" ] Decode.bool)
73
-
74
- _ ->
75
- Decode.at [ "target", "value" ] Decode.string
76
- )
77
-
78
-
79
- {-| -}
80
- fieldDecoder : Decoder Event
81
- fieldDecoder =
82
- Decode.field "type" Decode.string
83
- |> Decode.andThen
84
- (\type_ ->
85
- case type_ of
86
- "input" ->
87
- inputValueDecoder |> Decode.map InputEvent
88
-
89
- "focusin" ->
90
- FocusEvent
91
- |> Decode.succeed
92
-
93
- "focusout" ->
94
- BlurEvent
95
- |> Decode.succeed
96
-
97
- _ ->
98
- Decode.fail "Unexpected event.type"
99
- )
100
-
101
-
102
- {-| -}
103
- update : Decode.Value -> PageFormState -> PageFormState
104
- update eventObject pageFormState =
105
- --if Dict.isEmpty pageFormState then
106
- -- -- TODO get all initial field values
107
- -- pageFormState
108
- --
109
- --else
110
- case eventObject |> Decode.decodeValue fieldEventDecoder of
111
- Ok fieldEvent ->
112
- pageFormState
113
- |> Dict.update fieldEvent.formId
114
- (\previousValue_ ->
115
- let
116
- previousValue : FormState
117
- previousValue =
118
- previousValue_
119
- |> Maybe.withDefault init
120
- in
121
- previousValue
122
- |> updateForm fieldEvent
123
- |> Just
124
- )
125
-
126
- Err _ ->
127
- pageFormState
128
-
129
-
130
- {-| -}
131
- setField : { formId : String, name : String, value : String } -> PageFormState -> PageFormState
132
- setField info pageFormState =
133
- pageFormState
134
- |> Dict.update info.formId
135
- (\previousValue_ ->
136
- let
137
- previousValue : FormState
138
- previousValue =
139
- previousValue_
140
- |> Maybe.withDefault init
141
- in
142
- { previousValue
143
- | fields =
144
- previousValue.fields
145
- |> Dict.update info.name
146
- (\previousFieldValue_ ->
147
- let
148
- previousFieldValue : FieldState
149
- previousFieldValue =
150
- previousFieldValue_
151
- |> Maybe.withDefault { value = "", status = FieldStatus.NotVisited }
152
- in
153
- { previousFieldValue | value = info.value }
154
- |> Just
155
- )
156
- }
157
- |> Just
158
- )
159
-
160
-
161
- {-| -}
162
- updateForm : FieldEvent -> FormState -> FormState
163
- updateForm fieldEvent formState =
164
- { formState
165
- | fields =
166
- formState.fields
167
- |> Dict.update fieldEvent.name
168
- (\previousValue_ ->
169
- let
170
- previousValue : FieldState
171
- previousValue =
172
- previousValue_
173
- |> Maybe.withDefault { value = fieldEvent.value, status = FieldStatus.NotVisited }
174
- in
175
- (case fieldEvent.event of
176
- InputEvent newValue ->
177
- { previousValue | value = newValue }
178
-
179
- FocusEvent ->
180
- { previousValue | status = previousValue.status |> increaseStatusTo FieldStatus.Focused }
181
-
182
- BlurEvent ->
183
- { previousValue | status = previousValue.status |> increaseStatusTo FieldStatus.Blurred }
184
- )
185
- |> Just
186
- )
187
- }
188
-
189
-
190
- {-| -}
191
- setSubmitAttempted : String -> PageFormState -> PageFormState
192
- setSubmitAttempted fieldId pageFormState =
193
- pageFormState
194
- |> Dict.update fieldId
195
- (\maybeForm ->
196
- case maybeForm of
197
- Just formState ->
198
- Just { formState | submitAttempted = True }
199
-
200
- Nothing ->
201
- Just { init | submitAttempted = True }
202
- )
203
-
204
-
205
- {-| -}
206
- init : FormState
207
- init =
208
- { fields = Dict.empty
209
- , submitAttempted = False
210
- }
211
-
212
-
213
- {-| -}
214
- type alias PageFormState =
215
- Dict String FormState
216
-
217
-
218
- {-| -}
219
- type alias FormState =
220
- { fields : Dict String FieldState
221
- , submitAttempted : Bool
222
- }
223
-
224
-
225
- {-| -}
226
- type alias FieldState =
227
- { value : String
228
- , status : FieldStatus
229
- }
230
-
231
-
232
- {-| -}
233
- increaseStatusTo : FieldStatus -> FieldStatus -> FieldStatus
234
- increaseStatusTo increaseTo currentStatus =
235
- if statusRank increaseTo > statusRank currentStatus then
236
- increaseTo
237
-
238
- else
239
- currentStatus
240
-
241
-
242
- {-| -}
243
- statusRank : FieldStatus -> Int
244
- statusRank status =
245
- case status of
246
- FieldStatus.NotVisited ->
247
- 0
248
-
249
- FieldStatus.Focused ->
250
- 1
251
-
252
- FieldStatus.Changed ->
253
- 2
254
-
255
- FieldStatus.Blurred ->
256
- 3