elm-pages 3.0.0-beta.13 → 3.0.0-beta.15
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.
- package/README.md +1 -1
- package/codegen/elm-pages-codegen.js +1497 -1130
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm.json +1 -1
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1 -1
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +152 -40
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
- package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +58 -10
- package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +45 -29
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -1
- package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1 -1
- package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +46 -5
- package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
- package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
- package/generator/src/RouteBuilder.elm +66 -52
- package/generator/src/SharedTemplate.elm +3 -2
- package/generator/src/SiteConfig.elm +3 -2
- package/generator/src/build.js +5 -5
- package/generator/src/cli.js +7 -6
- package/generator/src/compatibility-key.js +1 -1
- package/generator/src/dev-server.js +7 -7
- package/generator/src/error-formatter.js +7 -3
- package/generator/src/render-test.js +109 -0
- package/generator/src/render.js +83 -66
- package/generator/src/request-cache.js +181 -160
- package/generator/static-code/hmr.js +16 -2
- package/generator/template/app/Api.elm +2 -2
- package/generator/template/app/Route/Index.elm +3 -3
- package/generator/template/app/Shared.elm +3 -3
- package/generator/template/app/Site.elm +3 -3
- package/package.json +10 -10
- package/src/ApiRoute.elm +60 -57
- package/src/BackendTask/Env.elm +89 -0
- package/src/{DataSource → BackendTask}/File.elm +89 -43
- package/src/{DataSource → BackendTask}/Glob.elm +134 -125
- package/src/BackendTask/Http.elm +673 -0
- package/src/{DataSource → BackendTask}/Internal/Glob.elm +1 -1
- package/src/BackendTask/Internal/Request.elm +28 -0
- package/src/BackendTask/Port.elm +206 -0
- package/src/{DataSource.elm → BackendTask.elm} +223 -207
- package/src/Exception.elm +95 -0
- package/src/Form.elm +21 -20
- package/src/Head.elm +7 -7
- package/src/Internal/ApiRoute.elm +7 -5
- package/src/PageServerResponse.elm +6 -1
- package/src/Pages/Generate.elm +334 -165
- package/src/Pages/Internal/Platform/Cli.elm +432 -761
- package/src/Pages/Internal/Platform/Cli.elm.bak +22 -22
- package/src/Pages/Internal/Platform/CompatibilityKey.elm +1 -1
- package/src/Pages/Internal/Platform/Effect.elm +0 -1
- package/src/Pages/Internal/Platform/GeneratorApplication.elm +63 -147
- package/src/Pages/Internal/Platform/StaticResponses.elm +73 -301
- package/src/Pages/Internal/Platform/ToJsPayload.elm +4 -4
- package/src/Pages/Internal/Platform.elm +25 -31
- package/src/Pages/Internal/Script.elm +3 -2
- package/src/Pages/Internal/StaticHttpBody.elm +35 -1
- package/src/Pages/Manifest.elm +5 -4
- package/src/Pages/ProgramConfig.elm +8 -7
- package/src/Pages/Script.elm +28 -13
- package/src/Pages/SiteConfig.elm +3 -2
- package/src/Pages/StaticHttp/Request.elm +2 -2
- package/src/Pages/StaticHttpRequest.elm +23 -100
- package/src/RequestsAndPending.elm +8 -19
- package/src/Server/Request.elm +15 -14
- package/src/Server/Session.elm +34 -34
- package/src/Server/SetCookie.elm +1 -1
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/dependencies.75364bef27ac5a049b87c3325f846fc6dbda23b8ed7187ed06748b96bb6a50a7.json +0 -1
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Console-Text.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Console-Text.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Generated-Main.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Generated-Main.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Color.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Color.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Monochrome.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format-Monochrome.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console-Format.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Console.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Highlightable.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Highlightable.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-JUnit.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-JUnit.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Json.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Json.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Reporter.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-Reporter.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-TestResults.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Reporter-TestResults.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-JsMessage.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-JsMessage.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Console.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Console.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Diff.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node-Vendor-Diff.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node.elmi +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/Test-Runner-Node.elmo +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/i.dat +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/lock +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elm.json +0 -38
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elmTestOutput.js +0 -29603
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/package.json +0 -1
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/src/Test/Generated/Main.elm +0 -27
- package/generator/dead-code-review/node_modules/.package-lock.json +0 -484
- package/generator/dead-code-review/node_modules/ansi-styles/index.d.ts +0 -345
- package/generator/dead-code-review/node_modules/ansi-styles/index.js +0 -163
- package/generator/dead-code-review/node_modules/ansi-styles/license +0 -9
- package/generator/dead-code-review/node_modules/ansi-styles/package.json +0 -56
- package/generator/dead-code-review/node_modules/ansi-styles/readme.md +0 -152
- package/generator/dead-code-review/node_modules/anymatch/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/anymatch/README.md +0 -87
- package/generator/dead-code-review/node_modules/anymatch/index.d.ts +0 -20
- package/generator/dead-code-review/node_modules/anymatch/index.js +0 -104
- package/generator/dead-code-review/node_modules/anymatch/package.json +0 -48
- package/generator/dead-code-review/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/generator/dead-code-review/node_modules/balanced-match/LICENSE.md +0 -21
- package/generator/dead-code-review/node_modules/balanced-match/README.md +0 -97
- package/generator/dead-code-review/node_modules/balanced-match/index.js +0 -62
- package/generator/dead-code-review/node_modules/balanced-match/package.json +0 -48
- package/generator/dead-code-review/node_modules/binary-extensions/binary-extensions.json +0 -260
- package/generator/dead-code-review/node_modules/binary-extensions/binary-extensions.json.d.ts +0 -3
- package/generator/dead-code-review/node_modules/binary-extensions/index.d.ts +0 -14
- package/generator/dead-code-review/node_modules/binary-extensions/index.js +0 -1
- package/generator/dead-code-review/node_modules/binary-extensions/license +0 -9
- package/generator/dead-code-review/node_modules/binary-extensions/package.json +0 -38
- package/generator/dead-code-review/node_modules/binary-extensions/readme.md +0 -41
- package/generator/dead-code-review/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
- package/generator/dead-code-review/node_modules/brace-expansion/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/brace-expansion/README.md +0 -135
- package/generator/dead-code-review/node_modules/brace-expansion/index.js +0 -203
- package/generator/dead-code-review/node_modules/brace-expansion/package.json +0 -46
- package/generator/dead-code-review/node_modules/braces/CHANGELOG.md +0 -184
- package/generator/dead-code-review/node_modules/braces/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/braces/README.md +0 -593
- package/generator/dead-code-review/node_modules/braces/index.js +0 -170
- package/generator/dead-code-review/node_modules/braces/lib/compile.js +0 -57
- package/generator/dead-code-review/node_modules/braces/lib/constants.js +0 -57
- package/generator/dead-code-review/node_modules/braces/lib/expand.js +0 -113
- package/generator/dead-code-review/node_modules/braces/lib/parse.js +0 -333
- package/generator/dead-code-review/node_modules/braces/lib/stringify.js +0 -32
- package/generator/dead-code-review/node_modules/braces/lib/utils.js +0 -112
- package/generator/dead-code-review/node_modules/braces/package.json +0 -77
- package/generator/dead-code-review/node_modules/chalk/index.d.ts +0 -415
- package/generator/dead-code-review/node_modules/chalk/license +0 -9
- package/generator/dead-code-review/node_modules/chalk/package.json +0 -68
- package/generator/dead-code-review/node_modules/chalk/readme.md +0 -341
- package/generator/dead-code-review/node_modules/chalk/source/index.js +0 -229
- package/generator/dead-code-review/node_modules/chalk/source/templates.js +0 -134
- package/generator/dead-code-review/node_modules/chalk/source/util.js +0 -39
- package/generator/dead-code-review/node_modules/chokidar/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/chokidar/README.md +0 -308
- package/generator/dead-code-review/node_modules/chokidar/index.js +0 -973
- package/generator/dead-code-review/node_modules/chokidar/lib/constants.js +0 -65
- package/generator/dead-code-review/node_modules/chokidar/lib/fsevents-handler.js +0 -524
- package/generator/dead-code-review/node_modules/chokidar/lib/nodefs-handler.js +0 -654
- package/generator/dead-code-review/node_modules/chokidar/package.json +0 -85
- package/generator/dead-code-review/node_modules/chokidar/types/index.d.ts +0 -188
- package/generator/dead-code-review/node_modules/color-convert/CHANGELOG.md +0 -54
- package/generator/dead-code-review/node_modules/color-convert/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/color-convert/README.md +0 -68
- package/generator/dead-code-review/node_modules/color-convert/conversions.js +0 -839
- package/generator/dead-code-review/node_modules/color-convert/index.js +0 -81
- package/generator/dead-code-review/node_modules/color-convert/package.json +0 -48
- package/generator/dead-code-review/node_modules/color-convert/route.js +0 -97
- package/generator/dead-code-review/node_modules/color-name/LICENSE +0 -8
- package/generator/dead-code-review/node_modules/color-name/README.md +0 -11
- package/generator/dead-code-review/node_modules/color-name/index.js +0 -152
- package/generator/dead-code-review/node_modules/color-name/package.json +0 -28
- package/generator/dead-code-review/node_modules/commander/LICENSE +0 -22
- package/generator/dead-code-review/node_modules/commander/Readme.md +0 -1118
- package/generator/dead-code-review/node_modules/commander/esm.mjs +0 -16
- package/generator/dead-code-review/node_modules/commander/index.js +0 -27
- package/generator/dead-code-review/node_modules/commander/lib/argument.js +0 -147
- package/generator/dead-code-review/node_modules/commander/lib/command.js +0 -2160
- package/generator/dead-code-review/node_modules/commander/lib/error.js +0 -45
- package/generator/dead-code-review/node_modules/commander/lib/help.js +0 -406
- package/generator/dead-code-review/node_modules/commander/lib/option.js +0 -326
- package/generator/dead-code-review/node_modules/commander/lib/suggestSimilar.js +0 -100
- package/generator/dead-code-review/node_modules/commander/package-support.json +0 -16
- package/generator/dead-code-review/node_modules/commander/package.json +0 -80
- package/generator/dead-code-review/node_modules/commander/typings/index.d.ts +0 -881
- package/generator/dead-code-review/node_modules/cross-spawn/CHANGELOG.md +0 -130
- package/generator/dead-code-review/node_modules/cross-spawn/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/cross-spawn/README.md +0 -96
- package/generator/dead-code-review/node_modules/cross-spawn/index.js +0 -39
- package/generator/dead-code-review/node_modules/cross-spawn/lib/enoent.js +0 -59
- package/generator/dead-code-review/node_modules/cross-spawn/lib/parse.js +0 -91
- package/generator/dead-code-review/node_modules/cross-spawn/lib/util/escape.js +0 -45
- package/generator/dead-code-review/node_modules/cross-spawn/lib/util/readShebang.js +0 -23
- package/generator/dead-code-review/node_modules/cross-spawn/lib/util/resolveCommand.js +0 -52
- package/generator/dead-code-review/node_modules/cross-spawn/package.json +0 -73
- package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/LICENSE +0 -373
- package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/README.md +0 -64
- package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/elm_solve_deps_wasm.d.ts +0 -22
- package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/elm_solve_deps_wasm.js +0 -419
- package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/elm_solve_deps_wasm_bg.wasm +0 -0
- package/generator/dead-code-review/node_modules/elm-solve-deps-wasm/package.json +0 -27
- package/generator/dead-code-review/node_modules/elm-test/LICENSE +0 -27
- package/generator/dead-code-review/node_modules/elm-test/README.md +0 -192
- package/generator/dead-code-review/node_modules/elm-test/bin/elm-test +0 -3
- package/generator/dead-code-review/node_modules/elm-test/elm/elm.json +0 -25
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Console/Text.elm +0 -217
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console/Format/Color.elm +0 -30
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console/Format/Monochrome.elm +0 -39
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console/Format.elm +0 -212
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Console.elm +0 -207
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Highlightable.elm +0 -48
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/JUnit.elm +0 -161
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Json.elm +0 -158
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/Reporter.elm +0 -53
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Reporter/TestResults.elm +0 -113
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/JsMessage.elm +0 -38
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/Node/Vendor/Console.elm +0 -230
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/Node/Vendor/Diff.elm +0 -326
- package/generator/dead-code-review/node_modules/elm-test/elm/src/Test/Runner/Node.elm +0 -440
- package/generator/dead-code-review/node_modules/elm-test/lib/Compile.js +0 -110
- package/generator/dead-code-review/node_modules/elm-test/lib/DependencyProvider.js +0 -343
- package/generator/dead-code-review/node_modules/elm-test/lib/ElmCompiler.js +0 -109
- package/generator/dead-code-review/node_modules/elm-test/lib/ElmHome.js +0 -47
- package/generator/dead-code-review/node_modules/elm-test/lib/ElmJson.js +0 -194
- package/generator/dead-code-review/node_modules/elm-test/lib/FindTests.js +0 -276
- package/generator/dead-code-review/node_modules/elm-test/lib/Generate.js +0 -294
- package/generator/dead-code-review/node_modules/elm-test/lib/Install.js +0 -290
- package/generator/dead-code-review/node_modules/elm-test/lib/Parser.js +0 -941
- package/generator/dead-code-review/node_modules/elm-test/lib/Project.js +0 -117
- package/generator/dead-code-review/node_modules/elm-test/lib/Report.js +0 -23
- package/generator/dead-code-review/node_modules/elm-test/lib/RunTests.js +0 -322
- package/generator/dead-code-review/node_modules/elm-test/lib/Solve.js +0 -76
- package/generator/dead-code-review/node_modules/elm-test/lib/Supervisor.js +0 -294
- package/generator/dead-code-review/node_modules/elm-test/lib/SyncGet.js +0 -45
- package/generator/dead-code-review/node_modules/elm-test/lib/SyncGetWorker.js +0 -36
- package/generator/dead-code-review/node_modules/elm-test/lib/elm-test.js +0 -318
- package/generator/dead-code-review/node_modules/elm-test/package.json +0 -69
- package/generator/dead-code-review/node_modules/elm-test/templates/after.js +0 -29
- package/generator/dead-code-review/node_modules/elm-test/templates/before.js +0 -58
- package/generator/dead-code-review/node_modules/elm-test/templates/tests/Example.elm +0 -10
- package/generator/dead-code-review/node_modules/fill-range/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/fill-range/README.md +0 -237
- package/generator/dead-code-review/node_modules/fill-range/index.js +0 -249
- package/generator/dead-code-review/node_modules/fill-range/package.json +0 -69
- package/generator/dead-code-review/node_modules/fs.realpath/LICENSE +0 -43
- package/generator/dead-code-review/node_modules/fs.realpath/README.md +0 -33
- package/generator/dead-code-review/node_modules/fs.realpath/index.js +0 -66
- package/generator/dead-code-review/node_modules/fs.realpath/old.js +0 -303
- package/generator/dead-code-review/node_modules/fs.realpath/package.json +0 -26
- package/generator/dead-code-review/node_modules/fsevents/LICENSE +0 -22
- package/generator/dead-code-review/node_modules/fsevents/README.md +0 -83
- package/generator/dead-code-review/node_modules/fsevents/fsevents.d.ts +0 -46
- package/generator/dead-code-review/node_modules/fsevents/fsevents.js +0 -82
- package/generator/dead-code-review/node_modules/fsevents/fsevents.node +0 -0
- package/generator/dead-code-review/node_modules/fsevents/package.json +0 -62
- package/generator/dead-code-review/node_modules/glob/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/glob/README.md +0 -378
- package/generator/dead-code-review/node_modules/glob/common.js +0 -240
- package/generator/dead-code-review/node_modules/glob/glob.js +0 -790
- package/generator/dead-code-review/node_modules/glob/package.json +0 -55
- package/generator/dead-code-review/node_modules/glob/sync.js +0 -486
- package/generator/dead-code-review/node_modules/glob-parent/CHANGELOG.md +0 -110
- package/generator/dead-code-review/node_modules/glob-parent/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/glob-parent/README.md +0 -137
- package/generator/dead-code-review/node_modules/glob-parent/index.js +0 -42
- package/generator/dead-code-review/node_modules/glob-parent/package.json +0 -48
- package/generator/dead-code-review/node_modules/graceful-fs/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/graceful-fs/README.md +0 -143
- package/generator/dead-code-review/node_modules/graceful-fs/clone.js +0 -23
- package/generator/dead-code-review/node_modules/graceful-fs/graceful-fs.js +0 -448
- package/generator/dead-code-review/node_modules/graceful-fs/legacy-streams.js +0 -118
- package/generator/dead-code-review/node_modules/graceful-fs/package.json +0 -50
- package/generator/dead-code-review/node_modules/graceful-fs/polyfills.js +0 -355
- package/generator/dead-code-review/node_modules/has-flag/index.d.ts +0 -39
- package/generator/dead-code-review/node_modules/has-flag/index.js +0 -8
- package/generator/dead-code-review/node_modules/has-flag/license +0 -9
- package/generator/dead-code-review/node_modules/has-flag/package.json +0 -46
- package/generator/dead-code-review/node_modules/has-flag/readme.md +0 -89
- package/generator/dead-code-review/node_modules/inflight/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/inflight/README.md +0 -37
- package/generator/dead-code-review/node_modules/inflight/inflight.js +0 -54
- package/generator/dead-code-review/node_modules/inflight/package.json +0 -29
- package/generator/dead-code-review/node_modules/inherits/LICENSE +0 -16
- package/generator/dead-code-review/node_modules/inherits/README.md +0 -42
- package/generator/dead-code-review/node_modules/inherits/inherits.js +0 -9
- package/generator/dead-code-review/node_modules/inherits/inherits_browser.js +0 -27
- package/generator/dead-code-review/node_modules/inherits/package.json +0 -29
- package/generator/dead-code-review/node_modules/is-binary-path/index.d.ts +0 -17
- package/generator/dead-code-review/node_modules/is-binary-path/index.js +0 -7
- package/generator/dead-code-review/node_modules/is-binary-path/license +0 -9
- package/generator/dead-code-review/node_modules/is-binary-path/package.json +0 -40
- package/generator/dead-code-review/node_modules/is-binary-path/readme.md +0 -34
- package/generator/dead-code-review/node_modules/is-extglob/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/is-extglob/README.md +0 -107
- package/generator/dead-code-review/node_modules/is-extglob/index.js +0 -20
- package/generator/dead-code-review/node_modules/is-extglob/package.json +0 -69
- package/generator/dead-code-review/node_modules/is-glob/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/is-glob/README.md +0 -206
- package/generator/dead-code-review/node_modules/is-glob/index.js +0 -150
- package/generator/dead-code-review/node_modules/is-glob/package.json +0 -81
- package/generator/dead-code-review/node_modules/is-number/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/is-number/README.md +0 -187
- package/generator/dead-code-review/node_modules/is-number/index.js +0 -18
- package/generator/dead-code-review/node_modules/is-number/package.json +0 -82
- package/generator/dead-code-review/node_modules/isexe/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/isexe/README.md +0 -51
- package/generator/dead-code-review/node_modules/isexe/index.js +0 -57
- package/generator/dead-code-review/node_modules/isexe/mode.js +0 -41
- package/generator/dead-code-review/node_modules/isexe/package.json +0 -31
- package/generator/dead-code-review/node_modules/isexe/test/basic.js +0 -221
- package/generator/dead-code-review/node_modules/isexe/windows.js +0 -42
- package/generator/dead-code-review/node_modules/minimatch/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/minimatch/README.md +0 -259
- package/generator/dead-code-review/node_modules/minimatch/lib/path.js +0 -4
- package/generator/dead-code-review/node_modules/minimatch/minimatch.js +0 -906
- package/generator/dead-code-review/node_modules/minimatch/package.json +0 -32
- package/generator/dead-code-review/node_modules/normalize-path/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/normalize-path/README.md +0 -127
- package/generator/dead-code-review/node_modules/normalize-path/index.js +0 -35
- package/generator/dead-code-review/node_modules/normalize-path/package.json +0 -77
- package/generator/dead-code-review/node_modules/once/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/once/README.md +0 -79
- package/generator/dead-code-review/node_modules/once/once.js +0 -42
- package/generator/dead-code-review/node_modules/once/package.json +0 -33
- package/generator/dead-code-review/node_modules/path-key/index.d.ts +0 -40
- package/generator/dead-code-review/node_modules/path-key/index.js +0 -16
- package/generator/dead-code-review/node_modules/path-key/license +0 -9
- package/generator/dead-code-review/node_modules/path-key/package.json +0 -39
- package/generator/dead-code-review/node_modules/path-key/readme.md +0 -61
- package/generator/dead-code-review/node_modules/picomatch/CHANGELOG.md +0 -136
- package/generator/dead-code-review/node_modules/picomatch/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/picomatch/README.md +0 -708
- package/generator/dead-code-review/node_modules/picomatch/index.js +0 -3
- package/generator/dead-code-review/node_modules/picomatch/lib/constants.js +0 -179
- package/generator/dead-code-review/node_modules/picomatch/lib/parse.js +0 -1091
- package/generator/dead-code-review/node_modules/picomatch/lib/picomatch.js +0 -342
- package/generator/dead-code-review/node_modules/picomatch/lib/scan.js +0 -391
- package/generator/dead-code-review/node_modules/picomatch/lib/utils.js +0 -64
- package/generator/dead-code-review/node_modules/picomatch/package.json +0 -81
- package/generator/dead-code-review/node_modules/readdirp/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/readdirp/README.md +0 -122
- package/generator/dead-code-review/node_modules/readdirp/index.d.ts +0 -43
- package/generator/dead-code-review/node_modules/readdirp/index.js +0 -287
- package/generator/dead-code-review/node_modules/readdirp/package.json +0 -122
- package/generator/dead-code-review/node_modules/shebang-command/index.js +0 -19
- package/generator/dead-code-review/node_modules/shebang-command/license +0 -9
- package/generator/dead-code-review/node_modules/shebang-command/package.json +0 -34
- package/generator/dead-code-review/node_modules/shebang-command/readme.md +0 -34
- package/generator/dead-code-review/node_modules/shebang-regex/index.d.ts +0 -22
- package/generator/dead-code-review/node_modules/shebang-regex/index.js +0 -2
- package/generator/dead-code-review/node_modules/shebang-regex/license +0 -9
- package/generator/dead-code-review/node_modules/shebang-regex/package.json +0 -35
- package/generator/dead-code-review/node_modules/shebang-regex/readme.md +0 -33
- package/generator/dead-code-review/node_modules/split/.travis.yml +0 -3
- package/generator/dead-code-review/node_modules/split/LICENCE +0 -22
- package/generator/dead-code-review/node_modules/split/examples/pretty.js +0 -26
- package/generator/dead-code-review/node_modules/split/index.js +0 -63
- package/generator/dead-code-review/node_modules/split/package.json +0 -30
- package/generator/dead-code-review/node_modules/split/readme.markdown +0 -72
- package/generator/dead-code-review/node_modules/split/test/options.asynct.js +0 -46
- package/generator/dead-code-review/node_modules/split/test/partitioned_unicode.js +0 -34
- package/generator/dead-code-review/node_modules/split/test/split.asynct.js +0 -137
- package/generator/dead-code-review/node_modules/split/test/try_catch.asynct.js +0 -51
- package/generator/dead-code-review/node_modules/supports-color/browser.js +0 -5
- package/generator/dead-code-review/node_modules/supports-color/index.js +0 -135
- package/generator/dead-code-review/node_modules/supports-color/license +0 -9
- package/generator/dead-code-review/node_modules/supports-color/package.json +0 -53
- package/generator/dead-code-review/node_modules/supports-color/readme.md +0 -76
- package/generator/dead-code-review/node_modules/through/.travis.yml +0 -5
- package/generator/dead-code-review/node_modules/through/LICENSE.APACHE2 +0 -15
- package/generator/dead-code-review/node_modules/through/LICENSE.MIT +0 -24
- package/generator/dead-code-review/node_modules/through/index.js +0 -108
- package/generator/dead-code-review/node_modules/through/package.json +0 -36
- package/generator/dead-code-review/node_modules/through/readme.markdown +0 -64
- package/generator/dead-code-review/node_modules/through/test/async.js +0 -28
- package/generator/dead-code-review/node_modules/through/test/auto-destroy.js +0 -30
- package/generator/dead-code-review/node_modules/through/test/buffering.js +0 -71
- package/generator/dead-code-review/node_modules/through/test/end.js +0 -45
- package/generator/dead-code-review/node_modules/through/test/index.js +0 -133
- package/generator/dead-code-review/node_modules/to-regex-range/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/to-regex-range/README.md +0 -305
- package/generator/dead-code-review/node_modules/to-regex-range/index.js +0 -288
- package/generator/dead-code-review/node_modules/to-regex-range/package.json +0 -88
- package/generator/dead-code-review/node_modules/which/CHANGELOG.md +0 -166
- package/generator/dead-code-review/node_modules/which/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/which/README.md +0 -54
- package/generator/dead-code-review/node_modules/which/bin/node-which +0 -52
- package/generator/dead-code-review/node_modules/which/package.json +0 -43
- package/generator/dead-code-review/node_modules/which/which.js +0 -125
- package/generator/dead-code-review/node_modules/wrappy/LICENSE +0 -15
- package/generator/dead-code-review/node_modules/wrappy/README.md +0 -36
- package/generator/dead-code-review/node_modules/wrappy/package.json +0 -29
- package/generator/dead-code-review/node_modules/wrappy/wrappy.js +0 -33
- package/generator/dead-code-review/node_modules/xmlbuilder/.nycrc +0 -6
- package/generator/dead-code-review/node_modules/xmlbuilder/.vscode/launch.json +0 -23
- package/generator/dead-code-review/node_modules/xmlbuilder/CHANGELOG.md +0 -593
- package/generator/dead-code-review/node_modules/xmlbuilder/LICENSE +0 -21
- package/generator/dead-code-review/node_modules/xmlbuilder/README.md +0 -103
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/Derivation.js +0 -10
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/DocumentPosition.js +0 -12
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/NodeType.js +0 -25
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/OperationType.js +0 -11
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/Utility.js +0 -88
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/WriterState.js +0 -10
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLAttribute.js +0 -130
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLCData.js +0 -41
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLCharacterData.js +0 -86
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLComment.js +0 -41
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMConfiguration.js +0 -80
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMErrorHandler.js +0 -20
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMImplementation.js +0 -55
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDOMStringList.js +0 -44
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDAttList.js +0 -66
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDElement.js +0 -44
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDEntity.js +0 -115
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDTDNotation.js +0 -66
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDeclaration.js +0 -51
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocType.js +0 -235
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocument.js +0 -282
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocumentCB.js +0 -650
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDocumentFragment.js +0 -21
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLDummy.js +0 -39
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLElement.js +0 -334
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNamedNodeMap.js +0 -77
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNode.js +0 -999
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNodeFilter.js +0 -51
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLNodeList.js +0 -45
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js +0 -56
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLRaw.js +0 -40
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLStreamWriter.js +0 -209
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLStringWriter.js +0 -40
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLStringifier.js +0 -291
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLText.js +0 -82
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLTypeInfo.js +0 -23
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLUserDataHandler.js +0 -27
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/XMLWriterBase.js +0 -485
- package/generator/dead-code-review/node_modules/xmlbuilder/lib/index.js +0 -120
- package/generator/dead-code-review/node_modules/xmlbuilder/package.json +0 -51
- package/generator/dead-code-review/node_modules/xmlbuilder/perf/basic/escaping.coffee +0 -244
- package/generator/dead-code-review/node_modules/xmlbuilder/perf/basic/object.coffee +0 -21
- package/generator/dead-code-review/node_modules/xmlbuilder/perf/index.coffee +0 -161
- package/generator/dead-code-review/node_modules/xmlbuilder/perf/perf.list +0 -11
- package/generator/dead-code-review/node_modules/xmlbuilder/typings/index.d.ts +0 -1771
- package/generator/review/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/review/elm-stuff/0.19.1/i.dat +0 -0
- package/generator/review/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm-stuff/0.19.1/i.dat +0 -0
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision10/install/elm.json +0 -25
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm-stuff/0.19.1/d.dat +0 -0
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm-stuff/0.19.1/i.dat +0 -0
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm-stuff/0.19.1/o.dat +0 -0
- package/generator/review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision7/install/elm.json +0 -41
- package/src/DataSource/Env.elm +0 -62
- package/src/DataSource/Http.elm +0 -446
- package/src/DataSource/Internal/Request.elm +0 -20
- package/src/DataSource/Port.elm +0 -90
- package/src/MultiDict.elm +0 -49
- package/src/PairingHeap.elm +0 -137
- package/src/Parser/Extra/String.elm +0 -33
- package/src/Parser/Extra.elm +0 -69
- package/src/ProgramTest/ComplexQuery.elm +0 -360
- package/src/ProgramTest/EffectSimulation.elm +0 -122
- package/src/ProgramTest/Failure.elm +0 -367
- package/src/ProgramTest/HtmlHighlighter.elm +0 -116
- package/src/ProgramTest/HtmlParserHacks.elm +0 -58
- package/src/ProgramTest/HtmlRenderer.elm +0 -73
- package/src/ProgramTest/Program.elm +0 -30
- package/src/ProgramTest/StringLines.elm +0 -26
- package/src/ProgramTest/TestHtmlHacks.elm +0 -132
- package/src/ProgramTest/TestHtmlParser.elm +0 -201
- package/src/ProgramTest.elm +0 -2339
- package/src/Query/Extra.elm +0 -55
- package/src/SimulatedEffect/Cmd.elm +0 -69
- package/src/SimulatedEffect/Http.elm +0 -330
- package/src/SimulatedEffect/Navigation.elm +0 -69
- package/src/SimulatedEffect/Ports.elm +0 -62
- package/src/SimulatedEffect/Process.elm +0 -24
- package/src/SimulatedEffect/Sub.elm +0 -48
- package/src/SimulatedEffect/Task.elm +0 -252
- package/src/SimulatedEffect/Time.elm +0 -25
- package/src/SimulatedEffect.elm +0 -42
- package/src/String/Extra.elm +0 -6
- package/src/Test/Http.elm +0 -145
- package/src/TestResult.elm +0 -35
- package/src/TestState.elm +0 -305
- package/src/Url/Extra.elm +0 -100
- package/src/Vendored/Diff.elm +0 -321
- package/src/Vendored/Failure.elm +0 -217
- package/src/Vendored/FormatMonochrome.elm +0 -44
- package/src/Vendored/Highlightable.elm +0 -53
package/src/ApiRoute.elm
CHANGED
|
@@ -5,12 +5,12 @@ module ApiRoute exposing
|
|
|
5
5
|
, ApiRoute, ApiRouteBuilder, Response
|
|
6
6
|
, capture, literal, slash, succeed
|
|
7
7
|
, withGlobalHeadTags
|
|
8
|
-
, toJson, getBuildTimeRoutes,
|
|
8
|
+
, toJson, getBuildTimeRoutes, getGlobalHeadTagsBackendTask
|
|
9
9
|
)
|
|
10
10
|
|
|
11
11
|
{-| ApiRoute's are defined in `src/Api.elm` and are a way to generate files, like RSS feeds, sitemaps, or any text-based file that you output with an Elm function! You get access
|
|
12
|
-
to a
|
|
13
|
-
the
|
|
12
|
+
to a BackendTask so you can pull in HTTP data, etc. Because ApiRoutes don't hydrate into Elm apps (like pages in elm-pages do), you can pull in as much data as you want in
|
|
13
|
+
the BackendTask for your ApiRoutes, and it won't effect the payload size. Instead, the size of an ApiRoute is just the content you output for that route.
|
|
14
14
|
|
|
15
15
|
Similar to your elm-pages Route Modules, ApiRoute's can be either server-rendered or pre-rendered. Let's compare the differences between pre-rendered and server-rendered ApiRoutes, and the different
|
|
16
16
|
use cases they support.
|
|
@@ -25,7 +25,7 @@ A pre-rendered ApiRoute is just a generated file. For example:
|
|
|
25
25
|
- A redirect file for a hosting provider like Netlify
|
|
26
26
|
|
|
27
27
|
You could even generate a JavaScript file, an Elm file, or any file with a String body! It's really just a way to generate files, which are typically used to serve files to a user or Browser, but you execute them, copy them, etc. The only limit is your imagination!
|
|
28
|
-
The beauty is that you have a way to 1) pull in type-safe data using
|
|
28
|
+
The beauty is that you have a way to 1) pull in type-safe data using BackendTask's, and 2) write those files, and all in pure Elm!
|
|
29
29
|
|
|
30
30
|
@docs single, preRender
|
|
31
31
|
|
|
@@ -62,11 +62,11 @@ You define your ApiRoute's in `app/Api.elm`. Here's a simple example:
|
|
|
62
62
|
module Api exposing (routes)
|
|
63
63
|
|
|
64
64
|
import ApiRoute
|
|
65
|
-
import
|
|
65
|
+
import BackendTask exposing (BackendTask)
|
|
66
66
|
import Server.Request
|
|
67
67
|
|
|
68
68
|
routes :
|
|
69
|
-
|
|
69
|
+
BackendTask (List Route)
|
|
70
70
|
-> (Maybe { indent : Int, newLines : Bool } -> Html Never -> String)
|
|
71
71
|
-> List (ApiRoute.ApiRoute ApiRoute.Response)
|
|
72
72
|
routes getStaticRoutes htmlToString =
|
|
@@ -89,7 +89,7 @@ You define your ApiRoute's in `app/Api.elm`. Here's a simple example:
|
|
|
89
89
|
preRenderedExample =
|
|
90
90
|
ApiRoute.succeed
|
|
91
91
|
(\userId ->
|
|
92
|
-
|
|
92
|
+
BackendTask.succeed
|
|
93
93
|
(Json.Encode.object
|
|
94
94
|
[ ( "id", Json.Encode.string userId )
|
|
95
95
|
, ( "name", "Data for user " ++ userId |> Json.Encode.string )
|
|
@@ -103,7 +103,7 @@ You define your ApiRoute's in `app/Api.elm`. Here's a simple example:
|
|
|
103
103
|
|> ApiRoute.literal ".json"
|
|
104
104
|
|> ApiRoute.preRender
|
|
105
105
|
(\route ->
|
|
106
|
-
|
|
106
|
+
BackendTask.succeed
|
|
107
107
|
[ route "1"
|
|
108
108
|
, route "2"
|
|
109
109
|
, route "3"
|
|
@@ -144,7 +144,7 @@ You define your ApiRoute's in `app/Api.elm`. Here's a simple example:
|
|
|
144
144
|
)
|
|
145
145
|
]
|
|
146
146
|
|> Response.json
|
|
147
|
-
|>
|
|
147
|
+
|> BackendTask.succeed
|
|
148
148
|
)
|
|
149
149
|
Server.Request.rawBody
|
|
150
150
|
Server.Request.method
|
|
@@ -168,12 +168,12 @@ You define your ApiRoute's in `app/Api.elm`. Here's a simple example:
|
|
|
168
168
|
|
|
169
169
|
## Internals
|
|
170
170
|
|
|
171
|
-
@docs toJson, getBuildTimeRoutes,
|
|
171
|
+
@docs toJson, getBuildTimeRoutes, getGlobalHeadTagsBackendTask
|
|
172
172
|
|
|
173
173
|
-}
|
|
174
174
|
|
|
175
|
-
import
|
|
176
|
-
import
|
|
175
|
+
import BackendTask exposing (BackendTask)
|
|
176
|
+
import Exception exposing (Throwable)
|
|
177
177
|
import Head
|
|
178
178
|
import Internal.ApiRoute exposing (ApiRoute(..), ApiRouteBuilder(..))
|
|
179
179
|
import Json.Decode as Decode
|
|
@@ -190,28 +190,37 @@ type alias ApiRoute response =
|
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|
{-| Same as [`preRender`](#preRender), but for an ApiRoute that has no dynamic segments. This is just a bit simpler because
|
|
193
|
-
since there are no dynamic segments, you don't need to provide a
|
|
193
|
+
since there are no dynamic segments, you don't need to provide a BackendTask with the list of dynamic segments to pre-render because there is only a single possible route.
|
|
194
194
|
-}
|
|
195
|
-
single : ApiRouteBuilder (
|
|
195
|
+
single : ApiRouteBuilder (BackendTask Throwable String) (List String) -> ApiRoute Response
|
|
196
196
|
single handler =
|
|
197
197
|
handler
|
|
198
|
-
|> preRender (\constructor ->
|
|
198
|
+
|> preRender (\constructor -> BackendTask.succeed [ constructor ])
|
|
199
199
|
|
|
200
200
|
|
|
201
201
|
{-| -}
|
|
202
|
-
serverRender : ApiRouteBuilder (Server.Request.Parser (
|
|
202
|
+
serverRender : ApiRouteBuilder (Server.Request.Parser (BackendTask Throwable (Server.Response.Response Never Never))) constructor -> ApiRoute Response
|
|
203
203
|
serverRender ((ApiRouteBuilder patterns pattern _ _ _) as fullHandler) =
|
|
204
204
|
ApiRoute
|
|
205
205
|
{ regex = Regex.fromString ("^" ++ pattern ++ "$") |> Maybe.withDefault Regex.never
|
|
206
206
|
, matchesToResponse =
|
|
207
|
-
\path ->
|
|
207
|
+
\serverRequest path ->
|
|
208
208
|
Internal.ApiRoute.tryMatch path fullHandler
|
|
209
209
|
|> Maybe.map
|
|
210
|
-
(\
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
210
|
+
(\toBackendTask ->
|
|
211
|
+
Server.Request.getDecoder toBackendTask
|
|
212
|
+
|> (\decoder ->
|
|
213
|
+
Decode.decodeValue decoder serverRequest
|
|
214
|
+
|> Result.mapError Decode.errorToString
|
|
215
|
+
|> BackendTask.fromResult
|
|
216
|
+
|> BackendTask.map Just
|
|
217
|
+
)
|
|
218
|
+
|> BackendTask.onError
|
|
219
|
+
(\stringError ->
|
|
220
|
+
-- TODO make error with title and better context/formatting
|
|
221
|
+
Exception.fromString stringError |> BackendTask.fail
|
|
222
|
+
)
|
|
223
|
+
|> BackendTask.andThen
|
|
215
224
|
(\rendered ->
|
|
216
225
|
case rendered of
|
|
217
226
|
Just (Ok okRendered) ->
|
|
@@ -222,21 +231,21 @@ serverRender ((ApiRouteBuilder patterns pattern _ _ _) as fullHandler) =
|
|
|
222
231
|
|> Server.Request.errorsToString
|
|
223
232
|
|> Server.Response.plainText
|
|
224
233
|
|> Server.Response.withStatusCode 400
|
|
225
|
-
|>
|
|
234
|
+
|> BackendTask.succeed
|
|
226
235
|
|
|
227
236
|
Nothing ->
|
|
228
237
|
Server.Response.plainText "No matching request handler"
|
|
229
238
|
|> Server.Response.withStatusCode 400
|
|
230
|
-
|>
|
|
239
|
+
|> BackendTask.succeed
|
|
231
240
|
)
|
|
232
241
|
)
|
|
233
|
-
|> Maybe.map (
|
|
242
|
+
|> Maybe.map (BackendTask.map (Server.Response.toJson >> Just))
|
|
234
243
|
|> Maybe.withDefault
|
|
235
|
-
(
|
|
236
|
-
, buildTimeRoutes =
|
|
244
|
+
(BackendTask.succeed Nothing)
|
|
245
|
+
, buildTimeRoutes = BackendTask.succeed []
|
|
237
246
|
, handleRoute =
|
|
238
247
|
\path ->
|
|
239
|
-
|
|
248
|
+
BackendTask.succeed
|
|
240
249
|
(case Internal.ApiRoute.tryMatch path fullHandler of
|
|
241
250
|
Just _ ->
|
|
242
251
|
True
|
|
@@ -251,26 +260,26 @@ serverRender ((ApiRouteBuilder patterns pattern _ _ _) as fullHandler) =
|
|
|
251
260
|
|
|
252
261
|
|
|
253
262
|
{-| -}
|
|
254
|
-
preRenderWithFallback : (constructor ->
|
|
263
|
+
preRenderWithFallback : (constructor -> BackendTask Throwable (List (List String))) -> ApiRouteBuilder (BackendTask Throwable (Server.Response.Response Never Never)) constructor -> ApiRoute Response
|
|
255
264
|
preRenderWithFallback buildUrls ((ApiRouteBuilder patterns pattern _ toString constructor) as fullHandler) =
|
|
256
265
|
let
|
|
257
|
-
buildTimeRoutes__ :
|
|
266
|
+
buildTimeRoutes__ : BackendTask Throwable (List String)
|
|
258
267
|
buildTimeRoutes__ =
|
|
259
268
|
buildUrls (constructor [])
|
|
260
|
-
|>
|
|
269
|
+
|> BackendTask.map (List.map toString)
|
|
261
270
|
in
|
|
262
271
|
ApiRoute
|
|
263
272
|
{ regex = Regex.fromString ("^" ++ pattern ++ "$") |> Maybe.withDefault Regex.never
|
|
264
273
|
, matchesToResponse =
|
|
265
|
-
\path ->
|
|
274
|
+
\_ path ->
|
|
266
275
|
Internal.ApiRoute.tryMatch path fullHandler
|
|
267
|
-
|> Maybe.map (
|
|
276
|
+
|> Maybe.map (BackendTask.map (Server.Response.toJson >> Just))
|
|
268
277
|
|> Maybe.withDefault
|
|
269
|
-
(
|
|
278
|
+
(BackendTask.succeed Nothing)
|
|
270
279
|
, buildTimeRoutes = buildTimeRoutes__
|
|
271
280
|
, handleRoute =
|
|
272
281
|
\path ->
|
|
273
|
-
|
|
282
|
+
BackendTask.succeed
|
|
274
283
|
(case Internal.ApiRoute.tryMatch path fullHandler of
|
|
275
284
|
Just _ ->
|
|
276
285
|
True
|
|
@@ -293,42 +302,42 @@ encodeStaticFileBody fileBody =
|
|
|
293
302
|
|
|
294
303
|
|
|
295
304
|
{-| -}
|
|
296
|
-
preRender : (constructor ->
|
|
305
|
+
preRender : (constructor -> BackendTask Throwable (List (List String))) -> ApiRouteBuilder (BackendTask Throwable String) constructor -> ApiRoute Response
|
|
297
306
|
preRender buildUrls ((ApiRouteBuilder patterns pattern _ toString constructor) as fullHandler) =
|
|
298
307
|
let
|
|
299
|
-
buildTimeRoutes__ :
|
|
308
|
+
buildTimeRoutes__ : BackendTask Throwable (List String)
|
|
300
309
|
buildTimeRoutes__ =
|
|
301
310
|
buildUrls (constructor [])
|
|
302
|
-
|>
|
|
311
|
+
|> BackendTask.map (List.map toString)
|
|
303
312
|
|
|
304
|
-
preBuiltMatches :
|
|
313
|
+
preBuiltMatches : BackendTask Throwable (List (List String))
|
|
305
314
|
preBuiltMatches =
|
|
306
315
|
buildUrls (constructor [])
|
|
307
316
|
in
|
|
308
317
|
ApiRoute
|
|
309
318
|
{ regex = Regex.fromString ("^" ++ pattern ++ "$") |> Maybe.withDefault Regex.never
|
|
310
319
|
, matchesToResponse =
|
|
311
|
-
\path ->
|
|
320
|
+
\_ path ->
|
|
312
321
|
let
|
|
313
322
|
matches : List String
|
|
314
323
|
matches =
|
|
315
324
|
Internal.ApiRoute.pathToMatches path fullHandler
|
|
316
325
|
|
|
317
|
-
routeFound :
|
|
326
|
+
routeFound : BackendTask Throwable Bool
|
|
318
327
|
routeFound =
|
|
319
328
|
preBuiltMatches
|
|
320
|
-
|>
|
|
329
|
+
|> BackendTask.map (List.member matches)
|
|
321
330
|
in
|
|
322
331
|
routeFound
|
|
323
|
-
|>
|
|
332
|
+
|> BackendTask.andThen
|
|
324
333
|
(\found ->
|
|
325
334
|
if found then
|
|
326
335
|
Internal.ApiRoute.tryMatch path fullHandler
|
|
327
|
-
|> Maybe.map (
|
|
328
|
-
|> Maybe.withDefault (
|
|
336
|
+
|> Maybe.map (BackendTask.map (encodeStaticFileBody >> Just))
|
|
337
|
+
|> Maybe.withDefault (BackendTask.succeed Nothing)
|
|
329
338
|
|
|
330
339
|
else
|
|
331
|
-
|
|
340
|
+
BackendTask.succeed Nothing
|
|
332
341
|
)
|
|
333
342
|
, buildTimeRoutes = buildTimeRoutes__
|
|
334
343
|
, handleRoute =
|
|
@@ -339,7 +348,7 @@ preRender buildUrls ((ApiRouteBuilder patterns pattern _ toString constructor) a
|
|
|
339
348
|
Internal.ApiRoute.pathToMatches path fullHandler
|
|
340
349
|
in
|
|
341
350
|
preBuiltMatches
|
|
342
|
-
|>
|
|
351
|
+
|> BackendTask.map (List.member matches)
|
|
343
352
|
, pattern = patterns
|
|
344
353
|
, kind = "prerender"
|
|
345
354
|
, globalHeadTags = Nothing
|
|
@@ -422,25 +431,19 @@ capture (ApiRouteBuilder patterns pattern previousHandler toString constructor)
|
|
|
422
431
|
|
|
423
432
|
{-| For internal use by generated code. Not so useful in user-land.
|
|
424
433
|
-}
|
|
425
|
-
getBuildTimeRoutes : ApiRoute response ->
|
|
434
|
+
getBuildTimeRoutes : ApiRoute response -> BackendTask Throwable (List String)
|
|
426
435
|
getBuildTimeRoutes (ApiRoute handler) =
|
|
427
436
|
handler.buildTimeRoutes
|
|
428
437
|
|
|
429
438
|
|
|
430
439
|
{-| Include head tags on every page's HTML.
|
|
431
440
|
-}
|
|
432
|
-
withGlobalHeadTags :
|
|
441
|
+
withGlobalHeadTags : BackendTask Throwable (List Head.Tag) -> ApiRoute response -> ApiRoute response
|
|
433
442
|
withGlobalHeadTags globalHeadTags (ApiRoute handler) =
|
|
434
443
|
ApiRoute { handler | globalHeadTags = Just globalHeadTags }
|
|
435
444
|
|
|
436
445
|
|
|
437
446
|
{-| -}
|
|
438
|
-
|
|
439
|
-
|
|
447
|
+
getGlobalHeadTagsBackendTask : ApiRoute response -> Maybe (BackendTask Throwable (List Head.Tag))
|
|
448
|
+
getGlobalHeadTagsBackendTask (ApiRoute handler) =
|
|
440
449
|
handler.globalHeadTags
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
--captureRest : ApiRouteBuilder (List String -> a) b -> ApiRouteBuilder a b
|
|
445
|
-
--captureRest previousHandler =
|
|
446
|
-
-- Debug.todo ""
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module BackendTask.Env exposing
|
|
2
|
+
( get, expect
|
|
3
|
+
, Error(..)
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
{-| Because BackendTask's in `elm-pages` never run in the browser (see [the BackendTask docs](BackendTask)), you can access environment variables securely. As long as the environment variable isn't sent
|
|
7
|
+
down into the final `Data` value, it won't end up in the client!
|
|
8
|
+
|
|
9
|
+
import BackendTask exposing (BackendTask)
|
|
10
|
+
import BackendTask.Env
|
|
11
|
+
import Exception exposing (Throwable)
|
|
12
|
+
|
|
13
|
+
type alias EnvVariables =
|
|
14
|
+
{ sendGridKey : String
|
|
15
|
+
, siteUrl : String
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
sendEmail : Email -> BackendTask Throwable ()
|
|
19
|
+
sendEmail email =
|
|
20
|
+
BackendTask.map2 EnvVariables
|
|
21
|
+
(BackendTask.Env.expect "SEND_GRID_KEY" |> BackendTask.throw)
|
|
22
|
+
(BackendTask.Env.get "BASE_URL"
|
|
23
|
+
|> BackendTask.map (Maybe.withDefault "http://localhost:1234")
|
|
24
|
+
)
|
|
25
|
+
|> BackendTask.andThen (sendEmailBackendTask email)
|
|
26
|
+
|
|
27
|
+
sendEmailBackendTask : Email -> EnvVariables -> BackendTask Throwable ()
|
|
28
|
+
sendEmailBackendTask email envVariables =
|
|
29
|
+
Debug.todo "Not defined here"
|
|
30
|
+
|
|
31
|
+
@docs get, expect
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## Errors
|
|
35
|
+
|
|
36
|
+
@docs Error
|
|
37
|
+
|
|
38
|
+
-}
|
|
39
|
+
|
|
40
|
+
import BackendTask exposing (BackendTask)
|
|
41
|
+
import BackendTask.Http
|
|
42
|
+
import BackendTask.Internal.Request
|
|
43
|
+
import Exception exposing (Exception)
|
|
44
|
+
import Json.Decode as Decode
|
|
45
|
+
import Json.Encode as Encode
|
|
46
|
+
import TerminalText
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
{-| -}
|
|
50
|
+
type Error
|
|
51
|
+
= MissingEnvVariable String
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
{-| Get an environment variable, or Nothing if there is no environment variable matching that name. This `BackendTask`
|
|
55
|
+
will never fail, but instead will return `Nothing` if the environment variable is missing.
|
|
56
|
+
-}
|
|
57
|
+
get : String -> BackendTask error (Maybe String)
|
|
58
|
+
get envVariableName =
|
|
59
|
+
BackendTask.Internal.Request.request
|
|
60
|
+
{ name = "env"
|
|
61
|
+
, body = BackendTask.Http.jsonBody (Encode.string envVariableName)
|
|
62
|
+
, expect =
|
|
63
|
+
BackendTask.Http.expectJson
|
|
64
|
+
(Decode.nullable Decode.string)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
{-| Get an environment variable, or a BackendTask Exception if there is no environment variable matching that name.
|
|
69
|
+
-}
|
|
70
|
+
expect : String -> BackendTask (Exception Error) String
|
|
71
|
+
expect envVariableName =
|
|
72
|
+
envVariableName
|
|
73
|
+
|> get
|
|
74
|
+
|> BackendTask.andThen
|
|
75
|
+
(\maybeValue ->
|
|
76
|
+
maybeValue
|
|
77
|
+
|> Result.fromMaybe
|
|
78
|
+
(Exception.Exception (MissingEnvVariable envVariableName)
|
|
79
|
+
{ title = "Missing Env Variable"
|
|
80
|
+
, body =
|
|
81
|
+
[ TerminalText.text "BackendTask.Env.expect was expecting a variable `"
|
|
82
|
+
, TerminalText.yellow envVariableName
|
|
83
|
+
, TerminalText.text "` but couldn't find a variable with that name."
|
|
84
|
+
]
|
|
85
|
+
|> TerminalText.toString
|
|
86
|
+
}
|
|
87
|
+
)
|
|
88
|
+
|> BackendTask.fromResult
|
|
89
|
+
)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
module
|
|
1
|
+
module BackendTask.File exposing
|
|
2
2
|
( bodyWithFrontmatter, bodyWithoutFrontmatter, onlyFrontmatter
|
|
3
3
|
, jsonFile, rawFile
|
|
4
|
+
, FileReadError(..)
|
|
4
5
|
)
|
|
5
6
|
|
|
6
|
-
{-| This module lets you read files from the local filesystem as a [`
|
|
7
|
+
{-| This module lets you read files from the local filesystem as a [`BackendTask`](BackendTask#BackendTask).
|
|
7
8
|
File paths are relative to the root of your `elm-pages` project (next to the `elm.json` file and `src/` directory).
|
|
8
9
|
|
|
9
10
|
|
|
@@ -40,12 +41,19 @@ plain old JSON in Elm.
|
|
|
40
41
|
|
|
41
42
|
@docs jsonFile, rawFile
|
|
42
43
|
|
|
44
|
+
|
|
45
|
+
## Exceptions
|
|
46
|
+
|
|
47
|
+
@docs FileReadError
|
|
48
|
+
|
|
43
49
|
-}
|
|
44
50
|
|
|
45
|
-
import
|
|
46
|
-
import
|
|
47
|
-
import
|
|
51
|
+
import BackendTask exposing (BackendTask)
|
|
52
|
+
import BackendTask.Http
|
|
53
|
+
import BackendTask.Internal.Request
|
|
54
|
+
import Exception exposing (Exception)
|
|
48
55
|
import Json.Decode as Decode exposing (Decoder)
|
|
56
|
+
import TerminalText
|
|
49
57
|
|
|
50
58
|
|
|
51
59
|
frontmatter : Decoder frontmatter -> Decoder frontmatter
|
|
@@ -55,11 +63,11 @@ frontmatter frontmatterDecoder =
|
|
|
55
63
|
|
|
56
64
|
{-|
|
|
57
65
|
|
|
58
|
-
import
|
|
59
|
-
import
|
|
66
|
+
import BackendTask exposing (BackendTask)
|
|
67
|
+
import BackendTask.File as File
|
|
60
68
|
import Decode as Decode exposing (Decoder)
|
|
61
69
|
|
|
62
|
-
blogPost :
|
|
70
|
+
blogPost : BackendTask BlogPostMetadata
|
|
63
71
|
blogPost =
|
|
64
72
|
File.bodyWithFrontmatter blogPostDecoder
|
|
65
73
|
"blog/hello-world.md"
|
|
@@ -81,7 +89,7 @@ frontmatter frontmatterDecoder =
|
|
|
81
89
|
Decode.map (String.split " ")
|
|
82
90
|
Decode.string
|
|
83
91
|
|
|
84
|
-
This will give us a
|
|
92
|
+
This will give us a BackendTask that results in the following value:
|
|
85
93
|
|
|
86
94
|
value =
|
|
87
95
|
{ body = "Hey there! This is my first post :)"
|
|
@@ -91,13 +99,13 @@ This will give us a DataSource that results in the following value:
|
|
|
91
99
|
|
|
92
100
|
It's common to parse the body with a markdown parser or other format.
|
|
93
101
|
|
|
94
|
-
import
|
|
95
|
-
import
|
|
102
|
+
import BackendTask exposing (BackendTask)
|
|
103
|
+
import BackendTask.File as File
|
|
96
104
|
import Decode as Decode exposing (Decoder)
|
|
97
105
|
import Html exposing (Html)
|
|
98
106
|
|
|
99
107
|
example :
|
|
100
|
-
|
|
108
|
+
BackendTask
|
|
101
109
|
{ title : String
|
|
102
110
|
, body : List (Html msg)
|
|
103
111
|
}
|
|
@@ -133,7 +141,7 @@ It's common to parse the body with a markdown parser or other format.
|
|
|
133
141
|
)
|
|
134
142
|
|
|
135
143
|
-}
|
|
136
|
-
bodyWithFrontmatter : (String -> Decoder frontmatter) -> String ->
|
|
144
|
+
bodyWithFrontmatter : (String -> Decoder frontmatter) -> String -> BackendTask (Exception (FileReadError Decode.Error)) frontmatter
|
|
137
145
|
bodyWithFrontmatter frontmatterDecoder filePath =
|
|
138
146
|
read filePath
|
|
139
147
|
(body
|
|
@@ -144,16 +152,23 @@ bodyWithFrontmatter frontmatterDecoder filePath =
|
|
|
144
152
|
)
|
|
145
153
|
|
|
146
154
|
|
|
155
|
+
{-| -}
|
|
156
|
+
type FileReadError decoding
|
|
157
|
+
= FileDoesntExist
|
|
158
|
+
| FileReadError String
|
|
159
|
+
| DecodingError decoding
|
|
160
|
+
|
|
161
|
+
|
|
147
162
|
{-| Same as `bodyWithFrontmatter` except it doesn't include the body.
|
|
148
163
|
|
|
149
164
|
This is often useful when you're aggregating data, for example getting a listing of blog posts and need to extract
|
|
150
165
|
just the metadata.
|
|
151
166
|
|
|
152
|
-
import
|
|
153
|
-
import
|
|
167
|
+
import BackendTask exposing (BackendTask)
|
|
168
|
+
import BackendTask.File as File
|
|
154
169
|
import Decode as Decode exposing (Decoder)
|
|
155
170
|
|
|
156
|
-
blogPost :
|
|
171
|
+
blogPost : BackendTask BlogPostMetadata
|
|
157
172
|
blogPost =
|
|
158
173
|
File.onlyFrontmatter
|
|
159
174
|
blogPostDecoder
|
|
@@ -171,34 +186,34 @@ just the metadata.
|
|
|
171
186
|
(Decode.field "tags" (Decode.list Decode.string))
|
|
172
187
|
|
|
173
188
|
If you wanted to use this to get this metadata for all blog posts in a folder, you could use
|
|
174
|
-
the [`
|
|
189
|
+
the [`BackendTask`](BackendTask) API along with [`BackendTask.Glob`](BackendTask-Glob).
|
|
175
190
|
|
|
176
|
-
import
|
|
177
|
-
import
|
|
191
|
+
import BackendTask exposing (BackendTask)
|
|
192
|
+
import BackendTask.File as File
|
|
178
193
|
import Decode as Decode exposing (Decoder)
|
|
179
194
|
|
|
180
|
-
blogPostFiles :
|
|
195
|
+
blogPostFiles : BackendTask (List String)
|
|
181
196
|
blogPostFiles =
|
|
182
197
|
Glob.succeed identity
|
|
183
198
|
|> Glob.captureFilePath
|
|
184
199
|
|> Glob.match (Glob.literal "content/blog/")
|
|
185
200
|
|> Glob.match Glob.wildcard
|
|
186
201
|
|> Glob.match (Glob.literal ".md")
|
|
187
|
-
|> Glob.
|
|
202
|
+
|> Glob.toBackendTask
|
|
188
203
|
|
|
189
|
-
allMetadata :
|
|
204
|
+
allMetadata : BackendTask (List BlogPostMetadata)
|
|
190
205
|
allMetadata =
|
|
191
206
|
blogPostFiles
|
|
192
|
-
|>
|
|
207
|
+
|> BackendTask.map
|
|
193
208
|
(List.map
|
|
194
209
|
(File.onlyFrontmatter
|
|
195
210
|
blogPostDecoder
|
|
196
211
|
)
|
|
197
212
|
)
|
|
198
|
-
|>
|
|
213
|
+
|> BackendTask.resolve
|
|
199
214
|
|
|
200
215
|
-}
|
|
201
|
-
onlyFrontmatter : Decoder frontmatter -> String ->
|
|
216
|
+
onlyFrontmatter : Decoder frontmatter -> String -> BackendTask (Exception (FileReadError Decode.Error)) frontmatter
|
|
202
217
|
onlyFrontmatter frontmatterDecoder filePath =
|
|
203
218
|
read filePath
|
|
204
219
|
(frontmatter frontmatterDecoder)
|
|
@@ -216,16 +231,16 @@ tags: elm
|
|
|
216
231
|
Hey there! This is my first post :)
|
|
217
232
|
```
|
|
218
233
|
|
|
219
|
-
import
|
|
234
|
+
import BackendTask exposing (BackendTask)
|
|
220
235
|
|
|
221
|
-
data :
|
|
236
|
+
data : BackendTask String
|
|
222
237
|
data =
|
|
223
238
|
bodyWithoutFrontmatter "blog/hello-world.md"
|
|
224
239
|
|
|
225
240
|
Then data will yield the value `"Hey there! This is my first post :)"`.
|
|
226
241
|
|
|
227
242
|
-}
|
|
228
|
-
bodyWithoutFrontmatter : String ->
|
|
243
|
+
bodyWithoutFrontmatter : String -> BackendTask (Exception (FileReadError decoderError)) String
|
|
229
244
|
bodyWithoutFrontmatter filePath =
|
|
230
245
|
read filePath
|
|
231
246
|
body
|
|
@@ -241,15 +256,15 @@ use `jsonFile` to get the benefits of the `Decode` here.
|
|
|
241
256
|
|
|
242
257
|
You could read a file called `hello.txt` in your root project directory like this:
|
|
243
258
|
|
|
244
|
-
import
|
|
245
|
-
import
|
|
259
|
+
import BackendTask exposing (BackendTask)
|
|
260
|
+
import BackendTask.File as File
|
|
246
261
|
|
|
247
|
-
elmJsonFile :
|
|
262
|
+
elmJsonFile : BackendTask String
|
|
248
263
|
elmJsonFile =
|
|
249
264
|
File.rawFile "hello.txt"
|
|
250
265
|
|
|
251
266
|
-}
|
|
252
|
-
rawFile : String ->
|
|
267
|
+
rawFile : String -> BackendTask (Exception (FileReadError decoderError)) String
|
|
253
268
|
rawFile filePath =
|
|
254
269
|
read filePath (Decode.field "rawFile" Decode.string)
|
|
255
270
|
|
|
@@ -258,10 +273,10 @@ rawFile filePath =
|
|
|
258
273
|
|
|
259
274
|
The Decode will strip off any unused JSON data.
|
|
260
275
|
|
|
261
|
-
import
|
|
262
|
-
import
|
|
276
|
+
import BackendTask exposing (BackendTask)
|
|
277
|
+
import BackendTask.File as File
|
|
263
278
|
|
|
264
|
-
sourceDirectories :
|
|
279
|
+
sourceDirectories : BackendTask (List String)
|
|
265
280
|
sourceDirectories =
|
|
266
281
|
File.jsonFile
|
|
267
282
|
(Decode.field
|
|
@@ -271,15 +286,24 @@ The Decode will strip off any unused JSON data.
|
|
|
271
286
|
"elm.json"
|
|
272
287
|
|
|
273
288
|
-}
|
|
274
|
-
jsonFile : Decoder a -> String ->
|
|
289
|
+
jsonFile : Decoder a -> String -> BackendTask (Exception (FileReadError Decode.Error)) a
|
|
275
290
|
jsonFile jsonFileDecoder filePath =
|
|
276
291
|
rawFile filePath
|
|
277
|
-
|>
|
|
292
|
+
|> BackendTask.andThen
|
|
278
293
|
(\jsonString ->
|
|
279
294
|
jsonString
|
|
280
295
|
|> Decode.decodeString jsonFileDecoder
|
|
281
|
-
|> Result.mapError
|
|
282
|
-
|
|
296
|
+
|> Result.mapError
|
|
297
|
+
(\jsonDecodeError ->
|
|
298
|
+
Exception.Exception (DecodingError jsonDecodeError)
|
|
299
|
+
{ title = "JSON Decoding Error"
|
|
300
|
+
, body =
|
|
301
|
+
[ TerminalText.text (Decode.errorToString jsonDecodeError)
|
|
302
|
+
]
|
|
303
|
+
|> TerminalText.toString
|
|
304
|
+
}
|
|
305
|
+
)
|
|
306
|
+
|> BackendTask.fromResult
|
|
283
307
|
)
|
|
284
308
|
|
|
285
309
|
|
|
@@ -290,10 +314,32 @@ body =
|
|
|
290
314
|
Decode.field "withoutFrontmatter" Decode.string
|
|
291
315
|
|
|
292
316
|
|
|
293
|
-
read : String -> Decoder a ->
|
|
317
|
+
read : String -> Decoder a -> BackendTask (Exception (FileReadError error)) a
|
|
294
318
|
read filePath decoder =
|
|
295
|
-
|
|
319
|
+
BackendTask.Internal.Request.request
|
|
296
320
|
{ name = "read-file"
|
|
297
|
-
, body =
|
|
298
|
-
, expect =
|
|
321
|
+
, body = BackendTask.Http.stringBody "" filePath
|
|
322
|
+
, expect =
|
|
323
|
+
Decode.oneOf
|
|
324
|
+
[ Decode.field "errorCode"
|
|
325
|
+
(Decode.map Err (errorDecoder filePath))
|
|
326
|
+
, decoder |> Decode.map Ok
|
|
327
|
+
]
|
|
328
|
+
|> BackendTask.Http.expectJson
|
|
299
329
|
}
|
|
330
|
+
|> BackendTask.andThen BackendTask.fromResult
|
|
331
|
+
|
|
332
|
+
|
|
333
|
+
errorDecoder : String -> Decoder (Exception (FileReadError decoding))
|
|
334
|
+
errorDecoder filePath =
|
|
335
|
+
Decode.succeed
|
|
336
|
+
(Exception.Exception FileDoesntExist
|
|
337
|
+
{ title = "File Doesn't Exist"
|
|
338
|
+
, body =
|
|
339
|
+
[ TerminalText.text "Couldn't find file at path `"
|
|
340
|
+
, TerminalText.yellow filePath
|
|
341
|
+
, TerminalText.text "`"
|
|
342
|
+
]
|
|
343
|
+
|> TerminalText.toString
|
|
344
|
+
}
|
|
345
|
+
)
|