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
@@ -75,7 +75,7 @@ console.elmlog = (str) => logs.push(str + "\n");
75
75
  const { Elm } = require("./Runner.elm.js");
76
76
 
77
77
  // Start the Elm app
78
- const flags = { initialSeed: 188222656, fuzzRuns: 100, filter: null };
78
+ const flags = { initialSeed: 440865757, fuzzRuns: 100, filter: null };
79
79
  const app = Elm.Runner.init({ flags: flags });
80
80
 
81
81
  // Record the timing at which we received the last "runTest" message
@@ -75,19 +75,19 @@ let testsCount, todoTests;
75
75
  let reporter;
76
76
  let runners = [];
77
77
  let working = false;
78
- let workersCount = 10;
78
+ let workersCount = 2;
79
79
  let startWorkCallback = function(){};
80
80
  const verbosity = 0;
81
81
 
82
82
  // Create a long lived reporter worker
83
83
  const { Elm } = require("./Reporter.elm.js");
84
84
  const flags = {
85
- initialSeed: 188222656,
85
+ initialSeed: 440865757,
86
86
  fuzzRuns: 100,
87
- mode: "consoleColor",
87
+ mode: "consoleNoColor",
88
88
  verbosity: verbosity,
89
89
  globs: [],
90
- paths: ["/Users/dillonkearns/src/github.com/dillonkearns/elm-pages-v3-beta/generator/review/tests/Pages/Review/NoContractViolationsTest.elm"],
90
+ paths: ["/home/runner/work/elm-pages/elm-pages/generator/review/tests/Pages/Review/NoContractViolationsTest.elm"],
91
91
  };
92
92
  reporter = Elm.Reporter.init({ flags: flags });
93
93
 
@@ -9,26 +9,26 @@
9
9
  "direct": {
10
10
  "elm/core": "1.0.5",
11
11
  "elm/html": "1.0.0",
12
+ "elm/json": "1.1.3",
12
13
  "elm/regex": "1.0.0",
13
- "elm-community/result-extra": "2.4.0",
14
- "jfmengels/elm-review": "2.4.2",
15
- "mdgriffith/elm-codegen": "2.0.0",
16
- "stil4m/elm-syntax": "7.2.5",
14
+ "jfmengels/elm-review": "2.13.0",
15
+ "mdgriffith/elm-codegen": "3.0.0",
16
+ "stil4m/elm-syntax": "7.2.9",
17
17
  "the-sett/elm-syntax-dsl": "6.0.2"
18
18
  },
19
19
  "indirect": {
20
20
  "Chadtech/elm-bool-extra": "2.4.2",
21
- "elm/json": "1.1.3",
21
+ "elm/bytes": "1.0.8",
22
22
  "elm/parser": "1.1.0",
23
23
  "elm/project-metadata-utils": "1.0.2",
24
24
  "elm/random": "1.0.0",
25
25
  "elm/time": "1.0.0",
26
- "elm/virtual-dom": "1.0.2",
26
+ "elm/virtual-dom": "1.0.3",
27
27
  "elm-community/basics-extra": "4.1.0",
28
- "elm-community/list-extra": "8.3.0",
28
+ "elm-community/list-extra": "8.7.0",
29
29
  "elm-community/maybe-extra": "5.3.0",
30
- "elm-explorations/test": "1.2.2",
31
- "miniBill/elm-unicode": "1.0.2",
30
+ "elm-explorations/test": "2.1.1",
31
+ "miniBill/elm-unicode": "1.0.3",
32
32
  "rtfeldman/elm-hex": "1.0.0",
33
33
  "stil4m/structured-writer": "1.0.3",
34
34
  "the-sett/elm-pretty-printer": "3.0.0"
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "test-dependencies": {
38
38
  "direct": {
39
- "elm-explorations/test": "1.2.2"
39
+ "elm-explorations/test": "2.1.1"
40
40
  },
41
41
  "indirect": {}
42
42
  }
@@ -1,6 +1,6 @@
1
1
  module RouteBuilder exposing
2
2
  ( StatelessRoute, buildNoState
3
- , StaticPayload
3
+ , App
4
4
  , withOnAction
5
5
  , buildWithLocalState, buildWithSharedState
6
6
  , preRender, single
@@ -14,7 +14,7 @@ module RouteBuilder exposing
14
14
 
15
15
  ## Stateless Route Modules
16
16
 
17
- The simplest Route Module you can build is one with no state. It still can use `DataSource`'s, but it has no `init`, `update`, or `subscriptions`.
17
+ The simplest Route Module you can build is one with no state. It still can use `BackendTask`'s, but it has no `init`, `update`, or `subscriptions`.
18
18
 
19
19
  It can read the `Shared.Model`, but it cannot send `Shared.Msg`'s to update the `Shared.Model`. If you need a `Model`, use `buildWithLocalState`.
20
20
 
@@ -25,7 +25,7 @@ If you need to _change_ Shared state, use `buildWithSharedState`.
25
25
 
26
26
  ## Accessing Static Data
27
27
 
28
- With `elm-pages`, you can have HTTP data available before a page is loaded, or read in a file, etc, using the DataSource API. Since the data
28
+ With `elm-pages`, you can have HTTP data available before a page is loaded, or read in a file, etc, using the BackendTask API. Since the data
29
29
  is available when the page is pre-rendered (as well as in the hydrated page), this is called Static Data.
30
30
 
31
31
  An example of dynamic data would be keyboard input from the user, query params, or any other data that comes from the app running in the browser.
@@ -33,11 +33,11 @@ An example of dynamic data would be keyboard input from the user, query params,
33
33
  We have the following data during pre-render:
34
34
 
35
35
  - `path` - the current path is static. In other words, we know the current path when we build an elm-pages site. Note that we **do not** know query parameters, fragments, etc. That is dynamic data. Pre-rendering occurs for paths in our app, but we don't know what possible query paremters might be used when those paths are hit.
36
- - `data` - this will be the resolved `DataSource` for our page.
36
+ - `data` - this will be the resolved `BackendTask` for our page.
37
37
  - `sharedData` - we can access any shared data between pages. For example, you may have fetched the name of a blog ("Jane's Blog") from the API for a Content Management System (CMS).
38
38
  - `routeParams` - this is the record that includes any Dynamic Route Segments for the given page (or an empty record if there are none)
39
39
 
40
- @docs StaticPayload
40
+ @docs App
41
41
 
42
42
  @docs withOnAction
43
43
 
@@ -65,7 +65,7 @@ When there are Dynamic Route Segments, you need to tell `elm-pages` which pages
65
65
  }
66
66
 
67
67
  pages =
68
- DataSource.succeed
68
+ BackendTask.succeed
69
69
  [ { slug = "blog-post1" }
70
70
  , { slug = "blog-post2" }
71
71
  ]
@@ -85,46 +85,46 @@ When there are Dynamic Route Segments, you need to tell `elm-pages` which pages
85
85
 
86
86
  -}
87
87
 
88
- import Bytes exposing (Bytes)
89
- import DataSource exposing (DataSource)
90
- import DataSource.Http
88
+ import BackendTask exposing (BackendTask)
91
89
  import Dict exposing (Dict)
92
90
  import Effect exposing (Effect)
93
91
  import ErrorPage exposing (ErrorPage)
92
+ import FatalError exposing (FatalError)
93
+ import Form
94
94
  import Head
95
95
  import Http
96
+ import Json.Decode
97
+ import Pages.ConcurrentSubmission
96
98
  import Pages.Fetcher
97
- import Pages.FormState
98
99
  import Pages.Internal.NotFoundReason exposing (NotFoundReason)
99
100
  import Pages.Internal.RoutePattern exposing (RoutePattern)
100
- import Pages.Msg
101
+ import Pages.Navigation
101
102
  import Pages.PageUrl exposing (PageUrl)
102
- import Pages.Transition
103
- import Path exposing (Path)
103
+ import PagesMsg exposing (PagesMsg)
104
104
  import Server.Request
105
105
  import Server.Response
106
106
  import Shared
107
+ import UrlPath exposing (UrlPath)
107
108
  import View exposing (View)
108
109
 
109
110
 
110
111
  {-| -}
111
112
  type alias StatefulRoute routeParams data action model msg =
112
- { data : routeParams -> DataSource (Server.Response.Response data ErrorPage)
113
- , action : routeParams -> DataSource (Server.Response.Response action ErrorPage)
114
- , staticRoutes : DataSource (List routeParams)
113
+ { data : Server.Request.Request -> routeParams -> BackendTask FatalError (Server.Response.Response data ErrorPage)
114
+ , action : Server.Request.Request -> routeParams -> BackendTask FatalError (Server.Response.Response action ErrorPage)
115
+ , staticRoutes : BackendTask FatalError (List routeParams)
115
116
  , view :
116
- Maybe PageUrl
117
- -> Shared.Model
117
+ Shared.Model
118
118
  -> model
119
- -> StaticPayload data action routeParams
120
- -> View (Pages.Msg.Msg msg)
119
+ -> App data action routeParams
120
+ -> View (PagesMsg msg)
121
121
  , head :
122
- StaticPayload data action routeParams
122
+ App data action routeParams
123
123
  -> List Head.Tag
124
- , init : Maybe PageUrl -> Shared.Model -> StaticPayload data action routeParams -> ( model, Effect msg )
125
- , update : PageUrl -> StaticPayload data action routeParams -> msg -> model -> Shared.Model -> ( model, Effect msg, Maybe Shared.Msg )
126
- , subscriptions : Maybe PageUrl -> routeParams -> Path -> model -> Shared.Model -> Sub msg
127
- , handleRoute : { moduleName : List String, routePattern : RoutePattern } -> (routeParams -> List ( String, String )) -> routeParams -> DataSource (Maybe NotFoundReason)
124
+ , init : Shared.Model -> App data action routeParams -> ( model, Effect msg )
125
+ , update : App data action routeParams -> msg -> model -> Shared.Model -> ( model, Effect msg, Maybe Shared.Msg )
126
+ , subscriptions : routeParams -> UrlPath -> model -> Shared.Model -> Sub msg
127
+ , handleRoute : { moduleName : List String, routePattern : RoutePattern } -> (routeParams -> List ( String, String )) -> routeParams -> BackendTask FatalError (Maybe NotFoundReason)
128
128
  , kind : String
129
129
  , onAction : Maybe (action -> msg)
130
130
  }
@@ -136,36 +136,37 @@ type alias StatelessRoute routeParams data action =
136
136
 
137
137
 
138
138
  {-| -}
139
- type alias StaticPayload data action routeParams =
139
+ type alias App data action routeParams =
140
140
  { data : data
141
141
  , sharedData : Shared.Data
142
142
  , routeParams : routeParams
143
- , path : Path
143
+ , path : UrlPath
144
+ , url : Maybe PageUrl
144
145
  , action : Maybe action
145
146
  , submit :
146
147
  { fields : List ( String, String ), headers : List ( String, String ) }
147
148
  -> Pages.Fetcher.Fetcher (Result Http.Error action)
148
- , transition : Maybe Pages.Transition.Transition
149
- , fetchers : Dict String (Pages.Transition.FetcherState (Maybe action))
150
- , pageFormState : Pages.FormState.PageFormState
149
+ , navigation : Maybe Pages.Navigation.Navigation
150
+ , concurrentSubmissions : Dict String (Pages.ConcurrentSubmission.ConcurrentSubmission (Maybe action))
151
+ , pageFormState : Form.Model
151
152
  }
152
153
 
153
154
 
154
155
  {-| -}
155
156
  type Builder routeParams data action
156
157
  = WithData
157
- { data : routeParams -> DataSource (Server.Response.Response data ErrorPage)
158
- , action : routeParams -> DataSource (Server.Response.Response action ErrorPage)
159
- , staticRoutes : DataSource (List routeParams)
158
+ { data : Server.Request.Request -> routeParams -> BackendTask FatalError (Server.Response.Response data ErrorPage)
159
+ , action : Server.Request.Request -> routeParams -> BackendTask FatalError (Server.Response.Response action ErrorPage)
160
+ , staticRoutes : BackendTask FatalError (List routeParams)
160
161
  , head :
161
- StaticPayload data action routeParams
162
+ App data action routeParams
162
163
  -> List Head.Tag
163
164
  , serverless : Bool
164
165
  , handleRoute :
165
166
  { moduleName : List String, routePattern : RoutePattern }
166
167
  -> (routeParams -> List ( String, String ))
167
168
  -> routeParams
168
- -> DataSource (Maybe NotFoundReason)
169
+ -> BackendTask FatalError (Maybe NotFoundReason)
169
170
  , kind : String
170
171
  }
171
172
 
@@ -173,24 +174,23 @@ type Builder routeParams data action
173
174
  {-| -}
174
175
  buildNoState :
175
176
  { view :
176
- Maybe PageUrl
177
+ App data action routeParams
177
178
  -> Shared.Model
178
- -> StaticPayload data action routeParams
179
- -> View (Pages.Msg.Msg ())
179
+ -> View (PagesMsg ())
180
180
  }
181
181
  -> Builder routeParams data action
182
182
  -> StatefulRoute routeParams data action {} ()
183
183
  buildNoState { view } builderState =
184
184
  case builderState of
185
185
  WithData record ->
186
- { view = \maybePageUrl sharedModel _ -> view maybePageUrl sharedModel
186
+ { view = \shared model app -> view app shared
187
187
  , head = record.head
188
188
  , data = record.data
189
189
  , action = record.action
190
190
  , staticRoutes = record.staticRoutes
191
- , init = \_ _ _ -> ( {}, Effect.none )
192
- , update = \_ _ _ _ _ -> ( {}, Effect.none, Nothing )
193
- , subscriptions = \_ _ _ _ _ -> Sub.none
191
+ , init = \_ _ -> ( {}, Effect.none )
192
+ , update = \_ _ _ _ -> ( {}, Effect.none, Nothing )
193
+ , subscriptions = \_ _ _ _ -> Sub.none
194
194
  , handleRoute = record.handleRoute
195
195
  , kind = record.kind
196
196
  , onAction = Nothing
@@ -208,14 +208,13 @@ withOnAction toMsg config =
208
208
  {-| -}
209
209
  buildWithLocalState :
210
210
  { view :
211
- Maybe PageUrl
211
+ App data action routeParams
212
212
  -> Shared.Model
213
213
  -> model
214
- -> StaticPayload data action routeParams
215
- -> View (Pages.Msg.Msg msg)
216
- , init : Maybe PageUrl -> Shared.Model -> StaticPayload data action routeParams -> ( model, Effect msg )
217
- , update : PageUrl -> Shared.Model -> StaticPayload data action routeParams -> msg -> model -> ( model, Effect msg )
218
- , subscriptions : Maybe PageUrl -> routeParams -> Path -> Shared.Model -> model -> Sub msg
214
+ -> View (PagesMsg msg)
215
+ , init : App data action routeParams -> Shared.Model -> ( model, Effect msg )
216
+ , update : App data action routeParams -> Shared.Model -> msg -> model -> ( model, Effect msg )
217
+ , subscriptions : routeParams -> UrlPath -> Shared.Model -> model -> Sub msg
219
218
  }
220
219
  -> Builder routeParams data action
221
220
  -> StatefulRoute routeParams data action model msg
@@ -223,28 +222,23 @@ buildWithLocalState config builderState =
223
222
  case builderState of
224
223
  WithData record ->
225
224
  { view =
226
- \model sharedModel staticPayload ->
227
- config.view model sharedModel staticPayload
225
+ \model sharedModel app ->
226
+ config.view app model sharedModel
228
227
  , head = record.head
229
228
  , data = record.data
230
229
  , action = record.action
231
230
  , staticRoutes = record.staticRoutes
232
- , init = config.init
231
+ , init = \shared app -> config.init app shared
233
232
  , update =
234
- \pageUrl staticPayload msg model sharedModel ->
233
+ \app msg model sharedModel ->
235
234
  let
236
235
  ( updatedModel, cmd ) =
237
- config.update
238
- pageUrl
239
- sharedModel
240
- staticPayload
241
- msg
242
- model
236
+ config.update app sharedModel msg model
243
237
  in
244
238
  ( updatedModel, cmd, Nothing )
245
239
  , subscriptions =
246
- \maybePageUrl routeParams path model sharedModel ->
247
- config.subscriptions maybePageUrl routeParams path sharedModel model
240
+ \routeParams path model sharedModel ->
241
+ config.subscriptions routeParams path sharedModel model
248
242
  , handleRoute = record.handleRoute
249
243
  , kind = record.kind
250
244
  , onAction = Nothing
@@ -254,36 +248,35 @@ buildWithLocalState config builderState =
254
248
  {-| -}
255
249
  buildWithSharedState :
256
250
  { view :
257
- Maybe PageUrl
251
+ App data action routeParams
258
252
  -> Shared.Model
259
253
  -> model
260
- -> StaticPayload data action routeParams
261
- -> View (Pages.Msg.Msg msg)
262
- , init : Maybe PageUrl -> Shared.Model -> StaticPayload data action routeParams -> ( model, Effect msg )
263
- , update : PageUrl -> Shared.Model -> StaticPayload data action routeParams -> msg -> model -> ( model, Effect msg, Maybe Shared.Msg )
264
- , subscriptions : Maybe PageUrl -> routeParams -> Path -> Shared.Model -> model -> Sub msg
254
+ -> View (PagesMsg msg)
255
+ , init : App data action routeParams -> Shared.Model -> ( model, Effect msg )
256
+ , update : App data action routeParams -> Shared.Model -> msg -> model -> ( model, Effect msg, Maybe Shared.Msg )
257
+ , subscriptions : routeParams -> UrlPath -> Shared.Model -> model -> Sub msg
265
258
  }
266
259
  -> Builder routeParams data action
267
260
  -> StatefulRoute routeParams data action model msg
268
261
  buildWithSharedState config builderState =
269
262
  case builderState of
270
263
  WithData record ->
271
- { view = config.view
264
+ { view = \shared model app -> config.view app shared model
272
265
  , head = record.head
273
266
  , data = record.data
274
267
  , action = record.action
275
268
  , staticRoutes = record.staticRoutes
276
- , init = config.init
269
+ , init = \shared app -> config.init app shared
277
270
  , update =
278
- \pageUrl staticPayload msg model sharedModel ->
279
- config.update pageUrl
271
+ \app msg model sharedModel ->
272
+ config.update
273
+ app
280
274
  sharedModel
281
- staticPayload
282
275
  msg
283
276
  model
284
277
  , subscriptions =
285
- \maybePageUrl routeParams path model sharedModel ->
286
- config.subscriptions maybePageUrl routeParams path sharedModel model
278
+ \routeParams path model sharedModel ->
279
+ config.subscriptions routeParams path sharedModel model
287
280
  , handleRoute = record.handleRoute
288
281
  , kind = record.kind
289
282
  , onAction = Nothing
@@ -292,40 +285,40 @@ buildWithSharedState config builderState =
292
285
 
293
286
  {-| -}
294
287
  single :
295
- { data : DataSource data
296
- , head : StaticPayload data action {} -> List Head.Tag
288
+ { data : BackendTask FatalError data
289
+ , head : App data action {} -> List Head.Tag
297
290
  }
298
291
  -> Builder {} data action
299
292
  single { data, head } =
300
293
  WithData
301
- { data = \_ -> data |> DataSource.map Server.Response.render
302
- , action = \_ -> DataSource.fail "Internal Error - actions should never be called for statically generated pages."
303
- , staticRoutes = DataSource.succeed [ {} ]
294
+ { data = \_ _ -> data |> BackendTask.map Server.Response.render
295
+ , action = \_ _ -> BackendTask.fail (FatalError.fromString "Internal Error - actions should never be called for statically generated pages.")
296
+ , staticRoutes = BackendTask.succeed [ {} ]
304
297
  , head = head
305
298
  , serverless = False
306
- , handleRoute = \_ _ _ -> DataSource.succeed Nothing
299
+ , handleRoute = \_ _ _ -> BackendTask.succeed Nothing
307
300
  , kind = "static"
308
301
  }
309
302
 
310
303
 
311
304
  {-| -}
312
305
  preRender :
313
- { data : routeParams -> DataSource data
314
- , pages : DataSource (List routeParams)
315
- , head : StaticPayload data action routeParams -> List Head.Tag
306
+ { data : routeParams -> BackendTask FatalError data
307
+ , pages : BackendTask FatalError (List routeParams)
308
+ , head : App data action routeParams -> List Head.Tag
316
309
  }
317
310
  -> Builder routeParams data action
318
311
  preRender { data, head, pages } =
319
312
  WithData
320
- { data = data >> DataSource.map Server.Response.render
321
- , action = \_ -> DataSource.fail "Internal Error - actions should never be called for statically generated pages."
313
+ { data = \_ -> data >> BackendTask.map Server.Response.render
314
+ , action = \_ _ -> BackendTask.fail (FatalError.fromString "Internal Error - actions should never be called for statically generated pages.")
322
315
  , staticRoutes = pages
323
316
  , head = head
324
317
  , serverless = False
325
318
  , handleRoute =
326
319
  \moduleContext toRecord routeParams ->
327
320
  pages
328
- |> DataSource.map
321
+ |> BackendTask.map
329
322
  (\allRoutes ->
330
323
  if allRoutes |> List.member routeParams then
331
324
  Nothing
@@ -348,73 +341,45 @@ preRender { data, head, pages } =
348
341
 
349
342
  {-| -}
350
343
  preRenderWithFallback :
351
- { data : routeParams -> DataSource (Server.Response.Response data ErrorPage)
352
- , pages : DataSource (List routeParams)
353
- , head : StaticPayload data action routeParams -> List Head.Tag
344
+ { data : routeParams -> BackendTask FatalError (Server.Response.Response data ErrorPage)
345
+ , pages : BackendTask FatalError (List routeParams)
346
+ , head : App data action routeParams -> List Head.Tag
354
347
  }
355
348
  -> Builder routeParams data action
356
349
  preRenderWithFallback { data, head, pages } =
357
350
  WithData
358
- { data = data
359
- , action = \_ -> DataSource.fail "Internal Error - actions should never be called for statically generated pages."
351
+ { data = \_ -> data
352
+ , action = \_ _ -> BackendTask.fail (FatalError.fromString "Internal Error - actions should never be called for statically generated pages.")
360
353
  , staticRoutes = pages
361
354
  , head = head
362
355
  , serverless = False
363
356
  , handleRoute =
364
357
  \moduleContext toRecord routeParams ->
365
- DataSource.succeed Nothing
358
+ BackendTask.succeed Nothing
366
359
  , kind = "prerender-with-fallback"
367
360
  }
368
361
 
369
362
 
370
363
  {-| -}
371
364
  serverRender :
372
- { data : routeParams -> Server.Request.Parser (DataSource (Server.Response.Response data ErrorPage))
373
- , action : routeParams -> Server.Request.Parser (DataSource (Server.Response.Response action ErrorPage))
374
- , head : StaticPayload data action routeParams -> List Head.Tag
365
+ { data : routeParams -> Server.Request.Request -> BackendTask FatalError (Server.Response.Response data ErrorPage)
366
+ , action : routeParams -> Server.Request.Request -> BackendTask FatalError (Server.Response.Response action ErrorPage)
367
+ , head : App data action routeParams -> List Head.Tag
375
368
  }
376
369
  -> Builder routeParams data action
377
370
  serverRender { data, action, head } =
378
371
  WithData
379
372
  { data =
380
- \routeParams ->
381
- DataSource.Http.get
382
- "$$elm-pages$$headers"
383
- (routeParams
384
- |> data
385
- |> Server.Request.getDecoder
386
- )
387
- |> DataSource.andThen
388
- (\rendered ->
389
- case rendered of
390
- Ok okRendered ->
391
- okRendered
392
-
393
- Err error ->
394
- Server.Request.errorsToString error |> DataSource.fail
395
- )
373
+ \request routeParams ->
374
+ data routeParams request
396
375
  , action =
397
- \routeParams ->
398
- DataSource.Http.get
399
- "$$elm-pages$$headers"
400
- (routeParams
401
- |> action
402
- |> Server.Request.getDecoder
403
- )
404
- |> DataSource.andThen
405
- (\rendered ->
406
- case rendered of
407
- Ok okRendered ->
408
- okRendered
409
-
410
- Err error ->
411
- Server.Request.errorsToString error |> DataSource.fail
412
- )
413
- , staticRoutes = DataSource.succeed []
376
+ \request routeParams ->
377
+ action routeParams request
378
+ , staticRoutes = BackendTask.succeed []
414
379
  , head = head
415
380
  , serverless = True
416
381
  , handleRoute =
417
382
  \moduleContext toRecord routeParams ->
418
- DataSource.succeed Nothing
383
+ BackendTask.succeed Nothing
419
384
  , kind = "serverless"
420
385
  }
@@ -1,11 +1,12 @@
1
1
  module SharedTemplate exposing (SharedTemplate)
2
2
 
3
- import DataSource
3
+ import BackendTask
4
4
  import Effect exposing (Effect)
5
+ import FatalError exposing (FatalError)
5
6
  import Html exposing (Html)
6
7
  import Pages.Flags exposing (Flags)
7
8
  import Pages.PageUrl exposing (PageUrl)
8
- import Path exposing (Path)
9
+ import UrlPath exposing (UrlPath)
9
10
  import Route exposing (Route)
10
11
  import View exposing (View)
11
12
 
@@ -16,7 +17,7 @@ type alias SharedTemplate msg sharedModel sharedData mappedMsg =
16
17
  ->
17
18
  Maybe
18
19
  { path :
19
- { path : Path
20
+ { path : UrlPath
20
21
  , query : Maybe String
21
22
  , fragment : Maybe String
22
23
  }
@@ -28,18 +29,18 @@ type alias SharedTemplate msg sharedModel sharedData mappedMsg =
28
29
  , view :
29
30
  sharedData
30
31
  ->
31
- { path : Path
32
+ { path : UrlPath
32
33
  , route : Maybe Route
33
34
  }
34
35
  -> sharedModel
35
36
  -> (msg -> mappedMsg)
36
37
  -> View mappedMsg
37
38
  -> { body : List (Html mappedMsg), title : String }
38
- , data : DataSource.DataSource sharedData
39
- , subscriptions : Path -> sharedModel -> Sub msg
39
+ , data : BackendTask.BackendTask FatalError sharedData
40
+ , subscriptions : UrlPath -> sharedModel -> Sub msg
40
41
  , onPageChange :
41
42
  Maybe
42
- ({ path : Path
43
+ ({ path : UrlPath
43
44
  , query : Maybe String
44
45
  , fragment : Maybe String
45
46
  }
@@ -1,10 +1,11 @@
1
1
  module SiteConfig exposing (SiteConfig)
2
2
 
3
- import DataSource exposing (DataSource)
3
+ import BackendTask exposing (BackendTask)
4
+ import FatalError exposing (FatalError)
4
5
  import Head
5
6
 
6
7
 
7
8
  type alias SiteConfig =
8
9
  { canonicalUrl : String
9
- , head : DataSource (List Head.Tag)
10
+ , head : BackendTask FatalError (List Head.Tag)
10
11
  }
@@ -1,6 +1,6 @@
1
1
  // this middleware is only active when (config.base !== '/')
2
2
 
3
- module.exports = function baseMiddleware(base) {
3
+ export function baseMiddleware(base) {
4
4
  // Keep the named function. The name is visible in debug logs via `DEBUG=connect:dispatcher ...`
5
5
  return function viteBaseMiddleware(req, res, next) {
6
6
  // `req.url` only contains the path, since that is what gets passed in the HTTP request.
@@ -34,11 +34,11 @@ module.exports = function baseMiddleware(base) {
34
34
  const suggestionUrl = `${base}/${path.slice(1)}`;
35
35
  res.end(
36
36
  `The server is configured with a public base URL of ${base} - ` +
37
- `did you mean to visit ${suggestionUrl} instead?`
37
+ `did you mean to visit ${suggestionUrl} instead?`
38
38
  );
39
39
  return;
40
40
  }
41
41
 
42
42
  next();
43
43
  };
44
- };
44
+ }