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
@@ -1,14 +1,20 @@
1
1
  {
2
2
  "name": "elm-pages-app",
3
+ "type": "module",
3
4
  "scripts": {
4
5
  "postinstall": "elm-tooling install",
5
6
  "start": "elm-pages dev",
6
7
  "build": "elm-pages build"
7
8
  },
8
9
  "devDependencies": {
9
- "elm-optimize-level-2": "0.3.4",
10
- "elm-pages": "2.1.10",
11
- "elm-review": "^2.7.0",
12
- "elm-tooling": "^1.7.0"
10
+ "elm-codegen": "^0.3.0",
11
+ "elm-optimize-level-2": "^0.3.5",
12
+ "elm-pages": "^3.0.0-beta.42",
13
+ "elm-review": "^2.10.2",
14
+ "elm-tooling": "^1.14.0",
15
+ "vite": "^4.3.5"
16
+ },
17
+ "dependencies": {
18
+ "@netlify/functions": "^1.4.0"
13
19
  }
14
20
  }
@@ -0,0 +1,7 @@
1
+ // script/custom-backend-task.ts
2
+ async function hello(name) {
3
+ return `Hello ${name}!`;
4
+ }
5
+ export {
6
+ hello
7
+ };
@@ -0,0 +1,3 @@
1
+ export async function hello(name) {
2
+ return `Hello ${name}!`;
3
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "type": "application",
3
+ "source-directories": [
4
+ "src",
5
+ "../codegen"
6
+ ],
7
+ "elm-version": "0.19.1",
8
+ "dependencies": {
9
+ "direct": {
10
+ "dillonkearns/elm-cli-options-parser": "3.2.0",
11
+ "dillonkearns/elm-pages": "10.0.0",
12
+ "elm/bytes": "1.0.8",
13
+ "elm/core": "1.0.5",
14
+ "elm/html": "1.0.0",
15
+ "elm/json": "1.1.3",
16
+ "mdgriffith/elm-codegen": "3.0.0"
17
+ },
18
+ "indirect": {
19
+ "Chadtech/elm-bool-extra": "2.4.2",
20
+ "avh4/elm-color": "1.0.0",
21
+ "danfishgold/base64-bytes": "1.1.0",
22
+ "danyx23/elm-mimetype": "4.0.1",
23
+ "dillonkearns/elm-bcp47-language-tag": "1.0.1",
24
+ "dillonkearns/elm-date-or-date-time": "2.0.0",
25
+ "dillonkearns/elm-form": "3.0.0",
26
+ "elm/browser": "1.0.2",
27
+ "elm/file": "1.0.5",
28
+ "elm/http": "2.0.0",
29
+ "elm/parser": "1.1.0",
30
+ "elm/random": "1.0.0",
31
+ "elm/regex": "1.0.0",
32
+ "elm/time": "1.0.0",
33
+ "elm/url": "1.0.0",
34
+ "elm/virtual-dom": "1.0.3",
35
+ "elm-community/basics-extra": "4.1.0",
36
+ "elm-community/list-extra": "8.7.0",
37
+ "elm-community/maybe-extra": "5.3.0",
38
+ "fredcy/elm-parseint": "2.0.1",
39
+ "jluckyiv/elm-utc-date-strings": "1.0.0",
40
+ "justinmimbs/date": "4.0.1",
41
+ "miniBill/elm-codec": "2.0.0",
42
+ "miniBill/elm-unicode": "1.0.3",
43
+ "noahzgordon/elm-color-extra": "1.0.2",
44
+ "robinheghan/fnv1a": "1.0.0",
45
+ "robinheghan/murmur3": "1.0.0",
46
+ "rtfeldman/elm-css": "18.0.0",
47
+ "rtfeldman/elm-hex": "1.0.0",
48
+ "rtfeldman/elm-iso8601-date-strings": "1.1.4",
49
+ "stil4m/elm-syntax": "7.2.9",
50
+ "stil4m/structured-writer": "1.0.3",
51
+ "the-sett/elm-pretty-printer": "3.0.0",
52
+ "the-sett/elm-syntax-dsl": "6.0.2",
53
+ "turboMaCk/non-empty-list-alias": "1.3.1",
54
+ "vito/elm-ansi": "10.0.1"
55
+ }
56
+ },
57
+ "test-dependencies": {
58
+ "direct": {},
59
+ "indirect": {}
60
+ }
61
+ }
@@ -0,0 +1,312 @@
1
+ module AddRoute exposing (run)
2
+
3
+ import BackendTask
4
+ import Cli.Option as Option
5
+ import Cli.OptionsParser as OptionsParser
6
+ import Cli.Program as Program
7
+ import Elm
8
+ import Elm.Annotation as Type
9
+ import Elm.Case
10
+ import Elm.Declare
11
+ import Elm.Let
12
+ import Elm.Op
13
+ import Gen.BackendTask
14
+ import Gen.Effect as Effect
15
+ import Gen.FatalError
16
+ import Gen.Form as Form
17
+ import Gen.Form.FieldView as FieldView
18
+ import Gen.Html as Html
19
+ import Gen.Html.Attributes as Attr
20
+ import Gen.Json.Encode
21
+ import Gen.List
22
+ import Gen.Maybe
23
+ import Gen.Pages.Form as PagesForm
24
+ import Gen.Pages.Script
25
+ import Gen.Server.Request as Request
26
+ import Gen.Server.Response as Response
27
+ import Gen.View
28
+ import Pages.Script as Script exposing (Script)
29
+ import Scaffold.Form
30
+ import Scaffold.Route exposing (Type(..))
31
+
32
+
33
+ type alias CliOptions =
34
+ { moduleName : List String
35
+ , fields : List ( String, Scaffold.Form.Kind )
36
+ }
37
+
38
+
39
+ run : Script
40
+ run =
41
+ Script.withCliOptions program
42
+ (\cliOptions ->
43
+ cliOptions
44
+ |> createFile
45
+ |> Script.writeFile
46
+ |> BackendTask.allowFatal
47
+ )
48
+
49
+
50
+ program : Program.Config CliOptions
51
+ program =
52
+ Program.config
53
+ |> Program.add
54
+ (OptionsParser.build CliOptions
55
+ |> OptionsParser.with (Option.requiredPositionalArg "module" |> Scaffold.Route.moduleNameCliArg)
56
+ |> OptionsParser.withRestArgs Scaffold.Form.restArgsParser
57
+ )
58
+
59
+
60
+ createFile : CliOptions -> { path : String, body : String }
61
+ createFile { moduleName, fields } =
62
+ let
63
+ formHelpers :
64
+ Maybe
65
+ { formHandlers : Elm.Expression
66
+ , form : Elm.Expression
67
+ , declarations : List Elm.Declaration
68
+ }
69
+ formHelpers =
70
+ Scaffold.Form.provide
71
+ { fields = fields
72
+ , elmCssView = False
73
+ , view =
74
+ \{ formState, params } ->
75
+ Elm.Let.letIn
76
+ (\fieldView ->
77
+ Elm.list
78
+ ((params
79
+ |> List.map
80
+ (\{ name, kind, param } ->
81
+ fieldView (Elm.string name) param
82
+ )
83
+ )
84
+ ++ [ Elm.ifThen formState.submitting
85
+ (Html.button
86
+ [ Attr.disabled True
87
+ ]
88
+ [ Html.text "Submitting..."
89
+ ]
90
+ )
91
+ (Html.button []
92
+ [ Html.text "Submit"
93
+ ]
94
+ )
95
+ ]
96
+ )
97
+ )
98
+ |> Elm.Let.fn2 "fieldView"
99
+ ( "label", Type.string |> Just )
100
+ ( "field", Nothing )
101
+ (\label field ->
102
+ Html.div []
103
+ [ Html.label []
104
+ [ Html.call_.text (Elm.Op.append label (Elm.string " "))
105
+ , field |> FieldView.input []
106
+ , errorsView.call formState.errors field
107
+ ]
108
+ ]
109
+ )
110
+ |> Elm.Let.toExpression
111
+ }
112
+ in
113
+ Scaffold.Route.serverRender
114
+ { moduleName = moduleName
115
+ , action =
116
+ ( Alias
117
+ (Type.record
118
+ (case formHelpers of
119
+ Just _ ->
120
+ [ ( "errors", Type.namedWith [ "Form" ] "ServerResponse" [ Type.string ] )
121
+ ]
122
+
123
+ Nothing ->
124
+ []
125
+ )
126
+ )
127
+ , \routeParams request ->
128
+ formHelpers
129
+ |> Maybe.map
130
+ (\justFormHelp ->
131
+ Request.formData justFormHelp.formHandlers request
132
+ |> Gen.Maybe.call_.map
133
+ (Elm.fn ( "formData", Nothing )
134
+ (\formData ->
135
+ Elm.Case.tuple formData
136
+ "response"
137
+ "parsedForm"
138
+ (\response parsedForm ->
139
+ Elm.Case.custom parsedForm
140
+ Type.int
141
+ [ Elm.Case.branch1 "Form.Valid"
142
+ ( "validatedForm", Type.int )
143
+ (\validatedForm ->
144
+ Elm.Case.custom validatedForm
145
+ Type.int
146
+ [ Elm.Case.branch1 "Action"
147
+ ( "parsed", Type.int )
148
+ (\parsed ->
149
+ Scaffold.Form.recordEncoder parsed fields
150
+ |> Gen.Json.Encode.encode 2
151
+ |> Gen.Pages.Script.call_.log
152
+ |> Gen.BackendTask.call_.map
153
+ (Elm.fn ( "_", Nothing )
154
+ (\_ ->
155
+ Response.render
156
+ (Elm.record
157
+ [ ( "errors", response )
158
+ ]
159
+ )
160
+ )
161
+ )
162
+ )
163
+ ]
164
+ )
165
+ , Elm.Case.branch2 "Form.Invalid"
166
+ ( "parsed", Type.int )
167
+ ( "error", Type.int )
168
+ (\_ _ ->
169
+ "Form validations did not succeed!"
170
+ |> Gen.Pages.Script.log
171
+ |> Gen.BackendTask.call_.map
172
+ (Elm.fn ( "_", Nothing )
173
+ (\_ ->
174
+ Response.render
175
+ (Elm.record
176
+ [ ( "errors", response )
177
+ ]
178
+ )
179
+ )
180
+ )
181
+ )
182
+ ]
183
+ )
184
+ )
185
+ )
186
+ |> Gen.Maybe.withDefault
187
+ (Gen.BackendTask.fail
188
+ (Gen.FatalError.fromString "Expected form post")
189
+ )
190
+ )
191
+ |> Maybe.withDefault
192
+ (Gen.BackendTask.succeed
193
+ (Response.render
194
+ (Elm.record [])
195
+ )
196
+ )
197
+ )
198
+ , data =
199
+ ( Alias (Type.record [])
200
+ , \routeParams request ->
201
+ Gen.BackendTask.succeed
202
+ (Response.render
203
+ (Elm.record [])
204
+ )
205
+ )
206
+ , head = \app -> Elm.list []
207
+ }
208
+ |> Scaffold.Route.addDeclarations
209
+ (formHelpers
210
+ |> Maybe.map .declarations
211
+ |> Maybe.map ((::) errorsView.declaration)
212
+ |> Maybe.withDefault []
213
+ )
214
+ |> Scaffold.Route.buildWithLocalState
215
+ { view =
216
+ \{ shared, model, app } ->
217
+ Gen.View.make_.view
218
+ { title = moduleName |> String.join "." |> Elm.string
219
+ , body =
220
+ Elm.list
221
+ (case formHelpers of
222
+ Just justFormHelp ->
223
+ [ Html.h2 [] [ Html.text "Form" ]
224
+ , justFormHelp.form
225
+ |> PagesForm.call_.renderHtml
226
+ (Elm.list [])
227
+ (Form.options "form"
228
+ |> Form.withServerResponse
229
+ (app
230
+ |> Elm.get "action"
231
+ |> Gen.Maybe.map (Elm.get "errors")
232
+ )
233
+ )
234
+ app
235
+ ]
236
+
237
+ Nothing ->
238
+ [ Html.h2 [] [ Html.text "New Page" ]
239
+ ]
240
+ )
241
+ }
242
+ , update =
243
+ \{ shared, app, msg, model } ->
244
+ Elm.Case.custom msg
245
+ (Type.named [] "Msg")
246
+ [ Elm.Case.branch0 "NoOp"
247
+ (Elm.tuple model
248
+ Effect.none
249
+ )
250
+ ]
251
+ , init =
252
+ \{ shared, app } ->
253
+ Elm.tuple (Elm.record []) Effect.none
254
+ , subscriptions =
255
+ \{ routeParams, path, shared, model } ->
256
+ Elm.val "Sub.none"
257
+ , model =
258
+ Alias (Type.record [])
259
+ , msg =
260
+ Custom [ Elm.variant "NoOp" ]
261
+ }
262
+
263
+
264
+ errorsView :
265
+ { declaration : Elm.Declaration
266
+ , call : Elm.Expression -> Elm.Expression -> Elm.Expression
267
+ , callFrom : List String -> Elm.Expression -> Elm.Expression -> Elm.Expression
268
+ , value : List String -> Elm.Expression
269
+ }
270
+ errorsView =
271
+ Elm.Declare.fn2 "errorsView"
272
+ ( "errors", Type.namedWith [ "Form" ] "Errors" [ Type.string ] |> Just )
273
+ ( "field"
274
+ , Type.namedWith [ "Form", "Validation" ]
275
+ "Field"
276
+ [ Type.string
277
+ , Type.var "parsed"
278
+ , Type.var "kind"
279
+ ]
280
+ |> Just
281
+ )
282
+ (\errors field ->
283
+ Elm.ifThen
284
+ (Gen.List.call_.isEmpty (Form.errorsForField field errors))
285
+ (Html.div [] [])
286
+ (Html.div
287
+ []
288
+ [ Html.call_.ul (Elm.list [])
289
+ (Gen.List.call_.map
290
+ (Elm.fn ( "error", Nothing )
291
+ (\error ->
292
+ Html.li
293
+ [ Attr.style "color" "red"
294
+ ]
295
+ [ Html.call_.text error
296
+ ]
297
+ )
298
+ )
299
+ (Form.errorsForField field errors)
300
+ )
301
+ ]
302
+ )
303
+ |> Elm.withType
304
+ (Type.namedWith [ "Html" ]
305
+ "Html"
306
+ [ Type.namedWith
307
+ [ "PagesMsg" ]
308
+ "PagesMsg"
309
+ [ Type.named [] "Msg" ]
310
+ ]
311
+ )
312
+ )
@@ -0,0 +1,42 @@
1
+ module Stars exposing (run)
2
+
3
+ import BackendTask exposing (BackendTask)
4
+ import BackendTask.Http
5
+ import Cli.Option as Option
6
+ import Cli.OptionsParser as OptionsParser
7
+ import Cli.Program as Program
8
+ import Json.Decode as Decode
9
+ import Pages.Script as Script exposing (Script)
10
+
11
+
12
+ run : Script
13
+ run =
14
+ Script.withCliOptions program
15
+ (\{ username, repo } ->
16
+ BackendTask.Http.getJson
17
+ ("https://api.github.com/repos/dillonkearns/" ++ repo)
18
+ (Decode.field "stargazers_count" Decode.int)
19
+ |> BackendTask.allowFatal
20
+ |> BackendTask.andThen
21
+ (\stars ->
22
+ Script.log (String.fromInt stars)
23
+ )
24
+ )
25
+
26
+
27
+ type alias CliOptions =
28
+ { username : String
29
+ , repo : String
30
+ }
31
+
32
+
33
+ program : Program.Config CliOptions
34
+ program =
35
+ Program.config
36
+ |> Program.add
37
+ (OptionsParser.build CliOptions
38
+ |> OptionsParser.with
39
+ (Option.optionalKeywordArg "username" |> Option.withDefault "dillonkearns")
40
+ |> OptionsParser.with
41
+ (Option.optionalKeywordArg "repo" |> Option.withDefault "elm-pages")
42
+ )
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "elm-pages",
3
- "version": "3.0.0-beta.9",
3
+ "type": "module",
4
+ "version": "3.0.0",
4
5
  "homepage": "https://elm-pages.com",
5
6
  "moduleResolution": "node",
6
7
  "description": "Type-safe static sites, written in pure elm with your own custom elm-markup syntax.",
@@ -10,7 +11,7 @@
10
11
  "test": "./test.sh",
11
12
  "test:snapshot": "(cd examples/escaping && npm install && npm test) && (cd examples/base-path && npm install && npm test)",
12
13
  "cypress": "npm start & cypress run",
13
- "build:generator": "elm-codegen install && (cd codegen && lamdera make Generate.elm --output elm-pages-codegen.js)",
14
+ "build:generator": "elm-codegen install && (cd codegen && lamdera make Generate.elm --output elm-pages-codegen.js && mv elm-pages-codegen.js elm-pages-codegen.cjs)",
14
15
  "review": "elm-review"
15
16
  },
16
17
  "repository": "https://github.com/dillonkearns/elm-pages",
@@ -24,53 +25,55 @@
24
25
  "author": "Dillon Kearns",
25
26
  "license": "BSD-3-Clause",
26
27
  "dependencies": {
27
- "busboy": "^1.0.0",
28
+ "busboy": "^1.6.0",
28
29
  "chokidar": "^3.5.3",
29
- "commander": "^9.4.0",
30
+ "commander": "^10.0.1",
30
31
  "connect": "^3.7.0",
31
- "cookie-signature": "^1.1.0",
32
+ "cookie-signature": "^1.2.1",
32
33
  "cross-spawn": "7.0.3",
33
34
  "devcert": "^1.2.2",
34
35
  "elm-doc-preview": "^5.0.5",
35
36
  "elm-hot": "^1.1.6",
36
- "esbuild": "^0.15.5",
37
- "fs-extra": "^10.1.0",
38
- "globby": "11.0.4",
37
+ "esbuild": "^0.17.18",
38
+ "fs-extra": "^11.1.1",
39
+ "globby": "13.1.4",
39
40
  "gray-matter": "^4.0.3",
40
41
  "jsesc": "^3.0.2",
41
42
  "kleur": "^4.1.5",
42
- "memfs": "^3.4.7",
43
+ "make-fetch-happen": "^11.1.1",
44
+ "memfs": "^3.5.1",
43
45
  "micromatch": "^4.0.5",
44
- "node-fetch": "^2.6.7",
45
- "object-hash": "^2.2.0",
46
46
  "serve-static": "^1.15.0",
47
- "terser": "^5.14.2",
48
- "vite": "^3.1.8",
49
- "which": "^2.0.2"
47
+ "terser": "^5.17.1",
48
+ "vite": "^4.3.5",
49
+ "which": "^3.0.1"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/cross-spawn": "^6.0.2",
53
- "@types/fs-extra": "^9.0.13",
53
+ "@types/fs-extra": "^11.0.1",
54
+ "@types/make-fetch-happen": "^10.0.1",
54
55
  "@types/micromatch": "^4.0.2",
55
- "@types/node": "12.20.12",
56
- "@types/serve-static": "^1.15.0",
57
- "cypress": "^10.6.0",
58
- "elm-codegen": "^0.2.0",
59
- "elm-optimize-level-2": "^0.1.5",
60
- "elm-review": "^2.7.4",
61
- "elm-test": "^0.19.1-revision9",
62
- "elm-tooling": "^1.8.0",
56
+ "@types/node": "^20.1.0",
57
+ "@types/serve-static": "^1.15.1",
58
+ "cypress": "^12.13.0",
59
+ "elm-codegen": "^0.3.0",
60
+ "elm-optimize-level-2": "^0.3.5",
61
+ "elm-review": "^2.10.2",
62
+ "elm-test": "^0.19.1-revision12",
63
+ "elm-tooling": "^1.14.0",
63
64
  "elm-verify-examples": "^5.2.0",
64
- "elmi-to-json": "^1.2.0",
65
- "mocha": "^10.0.0",
66
- "typescript": "^4.7.4"
65
+ "elmi-to-json": "^1.4.3",
66
+ "typescript": "^5.0.4",
67
+ "vite": "^4.3.5",
68
+ "vitest": "^0.31.0"
67
69
  },
68
70
  "files": [
71
+ "adapter/",
69
72
  "generator/src/",
70
73
  "generator/review/",
71
74
  "generator/dead-code-review/",
72
75
  "src/",
73
- "codegen/elm-pages-codegen.js",
76
+ "codegen/elm-pages-codegen.cjs",
74
77
  "generator/template/",
75
78
  "generator/static-code/"
76
79
  ],