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,58 @@
1
+ module Pages.Fetcher exposing (Fetcher(..), FetcherInfo, submit, map)
2
+
3
+ {-|
4
+
5
+ @docs Fetcher, FetcherInfo, submit, map
6
+
7
+ -}
8
+
9
+ import Bytes exposing (Bytes)
10
+ import Bytes.Decode
11
+ import Http
12
+
13
+
14
+ {-| -}
15
+ type Fetcher decoded
16
+ = Fetcher (FetcherInfo decoded)
17
+
18
+
19
+ {-| -}
20
+ type alias FetcherInfo decoded =
21
+ { decoder : Result Http.Error Bytes -> decoded
22
+ , fields : List ( String, String )
23
+ , headers : List ( String, String )
24
+ , url : Maybe String
25
+ }
26
+
27
+
28
+ {-| -}
29
+ submit :
30
+ Bytes.Decode.Decoder decoded
31
+ -> { fields : List ( String, String ), headers : List ( String, String ) }
32
+ -> Fetcher (Result Http.Error decoded)
33
+ submit byteDecoder options =
34
+ Fetcher
35
+ { decoder =
36
+ \bytesResult ->
37
+ bytesResult
38
+ |> Result.andThen
39
+ (\okBytes ->
40
+ okBytes
41
+ |> Bytes.Decode.decode byteDecoder
42
+ |> Result.fromMaybe (Http.BadBody "Couldn't decode bytes.")
43
+ )
44
+ , fields = options.fields
45
+ , headers = ( "elm-pages-action-only", "true" ) :: options.headers
46
+ , url = Nothing
47
+ }
48
+
49
+
50
+ {-| -}
51
+ map : (a -> b) -> Fetcher a -> Fetcher b
52
+ map mapFn (Fetcher fetcher) =
53
+ Fetcher
54
+ { decoder = fetcher.decoder >> mapFn
55
+ , fields = fetcher.fields
56
+ , headers = fetcher.headers
57
+ , url = fetcher.url
58
+ }
@@ -0,0 +1,256 @@
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