elm-pages 3.0.0-beta.9 → 3.0.1
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 +2 -2
- package/adapter/netlify.js +207 -0
- package/codegen/{elm-pages-codegen.js → elm-pages-codegen.cjs} +2730 -2938
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/dependencies.c59ecaf7fa8379e3a2d0f793fe9784e3060cb64a6d1fe22b8f6a054502021dbe.json +1 -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.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 +38 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/elmTestOutput.js +30883 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/package.json +1 -0
- package/generator/dead-code-review/elm-stuff/generated-code/elm-community/elm-test/0.19.1-revision9/src/Test/Generated/Main.elm +27 -0
- 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/i.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 +1527 -422
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +17042 -13855
- 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 +2 -2
- package/generator/dead-code-review/elm.json +9 -7
- package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +64 -13
- package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +66 -50
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
- 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/i.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 +1527 -422
- package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +25118 -21832
- 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 +2 -2
- package/generator/review/elm.json +10 -10
- package/generator/src/RouteBuilder.elm +93 -128
- package/generator/src/SharedTemplate.elm +8 -7
- package/generator/src/SiteConfig.elm +3 -2
- package/generator/src/basepath-middleware.js +3 -3
- package/generator/src/build.js +143 -59
- package/generator/src/cli.js +292 -88
- package/generator/src/codegen.js +29 -27
- package/generator/src/compatibility-key.js +3 -0
- package/generator/src/compile-elm.js +43 -26
- package/generator/src/config.js +2 -4
- package/generator/src/copy-dir.js +2 -2
- package/generator/src/dev-server.js +160 -102
- package/generator/src/dir-helpers.js +9 -26
- package/generator/src/elm-codegen.js +5 -4
- package/generator/src/elm-file-constants.js +2 -3
- package/generator/src/error-formatter.js +12 -11
- package/generator/src/file-helpers.js +3 -4
- package/generator/src/generate-template-module-connector.js +23 -23
- package/generator/src/init.js +9 -8
- package/generator/src/pre-render-html.js +10 -13
- package/generator/src/render-test.js +109 -0
- package/generator/src/render-worker.js +25 -28
- package/generator/src/render.js +320 -143
- package/generator/src/request-cache.js +265 -162
- package/generator/src/resolve-elm-module.js +64 -0
- package/generator/src/rewrite-client-elm-json.js +6 -5
- package/generator/src/rewrite-elm-json-help.js +56 -0
- package/generator/src/rewrite-elm-json.js +17 -7
- package/generator/src/route-codegen-helpers.js +16 -31
- package/generator/src/seo-renderer.js +1 -3
- package/generator/src/vite-utils.js +1 -2
- package/generator/static-code/elm-pages.js +10 -0
- package/generator/static-code/hmr.js +79 -13
- package/generator/template/app/Api.elm +3 -2
- package/generator/template/app/Effect.elm +155 -0
- package/generator/template/app/ErrorPage.elm +49 -6
- package/generator/template/app/Route/Blog/Slug_.elm +86 -0
- package/generator/template/app/Route/Greet.elm +107 -0
- package/generator/template/app/Route/Hello.elm +119 -0
- package/generator/template/app/Route/Index.elm +26 -25
- package/generator/template/app/Shared.elm +38 -39
- package/generator/template/app/Site.elm +4 -7
- package/generator/template/app/View.elm +9 -8
- package/generator/template/codegen/elm.codegen.json +18 -0
- package/generator/template/custom-backend-task.ts +3 -0
- package/generator/template/elm-pages.config.mjs +13 -0
- package/generator/template/elm-tooling.json +0 -3
- package/generator/template/elm.json +34 -25
- package/generator/template/index.ts +1 -2
- package/generator/template/netlify.toml +4 -1
- package/generator/template/package.json +10 -4
- package/generator/template/script/.elm-pages/compiled-ports/custom-backend-task.mjs +7 -0
- package/generator/template/script/custom-backend-task.ts +3 -0
- package/generator/template/script/elm.json +61 -0
- package/generator/template/script/src/AddRoute.elm +312 -0
- package/generator/template/script/src/Stars.elm +42 -0
- package/package.json +30 -27
- package/src/ApiRoute.elm +249 -82
- package/src/BackendTask/Custom.elm +325 -0
- package/src/BackendTask/Env.elm +90 -0
- package/src/{DataSource → BackendTask}/File.elm +171 -56
- package/src/{DataSource → BackendTask}/Glob.elm +136 -125
- package/src/BackendTask/Http.elm +679 -0
- package/src/{DataSource → BackendTask}/Internal/Glob.elm +1 -1
- package/src/BackendTask/Internal/Request.elm +69 -0
- package/src/BackendTask/Random.elm +79 -0
- package/src/BackendTask/Time.elm +47 -0
- package/src/BackendTask.elm +531 -0
- package/src/FatalError.elm +90 -0
- package/src/FormData.elm +21 -18
- package/src/Head/Seo.elm +4 -4
- package/src/Head.elm +112 -8
- package/src/Internal/ApiRoute.elm +7 -5
- package/src/Internal/Request.elm +84 -4
- package/src/PageServerResponse.elm +6 -1
- package/src/Pages/ConcurrentSubmission.elm +127 -0
- package/src/Pages/Form.elm +340 -0
- package/src/Pages/FormData.elm +19 -0
- package/src/Pages/GeneratorProgramConfig.elm +15 -0
- package/src/Pages/Internal/FatalError.elm +5 -0
- package/src/Pages/Internal/Msg.elm +93 -0
- package/src/Pages/Internal/NotFoundReason.elm +4 -4
- package/src/Pages/Internal/Platform/Cli.elm +586 -768
- package/src/Pages/Internal/Platform/CompatibilityKey.elm +1 -1
- package/src/Pages/Internal/Platform/Effect.elm +1 -2
- package/src/Pages/Internal/Platform/GeneratorApplication.elm +379 -0
- package/src/Pages/Internal/Platform/StaticResponses.elm +65 -276
- package/src/Pages/Internal/Platform/ToJsPayload.elm +6 -9
- package/src/Pages/Internal/Platform.elm +330 -203
- package/src/Pages/Internal/ResponseSketch.elm +2 -2
- package/src/Pages/Internal/Script.elm +17 -0
- package/src/Pages/Internal/StaticHttpBody.elm +35 -1
- package/src/Pages/Manifest.elm +52 -11
- package/src/Pages/Navigation.elm +85 -0
- package/src/Pages/PageUrl.elm +26 -12
- package/src/Pages/ProgramConfig.elm +32 -22
- package/src/Pages/Script.elm +166 -0
- package/src/Pages/SiteConfig.elm +3 -2
- package/src/Pages/StaticHttp/Request.elm +2 -2
- package/src/Pages/StaticHttpRequest.elm +23 -99
- package/src/Pages/Url.elm +3 -3
- package/src/PagesMsg.elm +88 -0
- package/src/QueryParams.elm +21 -172
- package/src/RenderRequest.elm +7 -7
- package/src/RequestsAndPending.elm +37 -20
- package/src/Result/Extra.elm +26 -0
- package/src/Scaffold/Form.elm +569 -0
- package/src/Scaffold/Route.elm +1431 -0
- package/src/Server/Request.elm +476 -1001
- package/src/Server/Response.elm +130 -36
- package/src/Server/Session.elm +181 -111
- package/src/Server/SetCookie.elm +80 -32
- package/src/Stub.elm +53 -0
- package/src/Test/Html/Internal/ElmHtml/ToString.elm +8 -9
- package/src/{Path.elm → UrlPath.elm} +33 -36
- package/generator/template/public/images/icon-png.png +0 -0
- package/src/DataSource/Env.elm +0 -38
- package/src/DataSource/Http.elm +0 -446
- package/src/DataSource/Internal/Request.elm +0 -20
- package/src/DataSource/Port.elm +0 -90
- package/src/DataSource.elm +0 -546
- package/src/Form/Field.elm +0 -717
- package/src/Form/FieldStatus.elm +0 -36
- package/src/Form/FieldView.elm +0 -417
- package/src/Form/FormData.elm +0 -22
- package/src/Form/Validation.elm +0 -391
- package/src/Form/Value.elm +0 -118
- package/src/Form.elm +0 -1683
- package/src/FormDecoder.elm +0 -102
- package/src/Pages/FormState.elm +0 -256
- package/src/Pages/Generate.elm +0 -1242
- package/src/Pages/Internal/Form.elm +0 -17
- package/src/Pages/Internal/Platform/Cli.elm.bak +0 -1276
- package/src/Pages/Msg.elm +0 -79
- package/src/Pages/Transition.elm +0 -70
package/generator/src/build.js
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
import * as fs from "./dir-helpers.js";
|
|
2
|
+
import * as fsPromises from "fs/promises";
|
|
3
|
+
import { runElmReview } from "./compile-elm.js";
|
|
4
|
+
import { restoreColorSafe } from "./error-formatter.js";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { spawn as spawnCallback } from "cross-spawn";
|
|
7
|
+
import * as codegen from "./codegen.js";
|
|
8
|
+
import * as terser from "terser";
|
|
9
|
+
import * as os from "os";
|
|
10
|
+
import { Worker, SHARE_ENV } from "worker_threads";
|
|
11
|
+
import { ensureDirSync } from "./file-helpers.js";
|
|
12
|
+
import { generateClientFolder } from "./codegen.js";
|
|
13
|
+
import { default as which } from "which";
|
|
14
|
+
import { build } from "vite";
|
|
15
|
+
import * as preRenderHtml from "./pre-render-html.js";
|
|
16
|
+
import * as esbuild from "esbuild";
|
|
17
|
+
import { createHash } from "crypto";
|
|
18
|
+
import { merge_vite_configs } from "./vite-utils.js";
|
|
19
|
+
import { resolveConfig } from "./config.js";
|
|
20
|
+
import * as globby from "globby";
|
|
21
|
+
import { fileURLToPath } from "url";
|
|
22
|
+
import { copyFile } from "fs/promises";
|
|
22
23
|
|
|
23
24
|
let pool = [];
|
|
24
25
|
let pagesReady;
|
|
@@ -31,7 +32,6 @@ let pagesReadyCalled = false;
|
|
|
31
32
|
let activeWorkers = 0;
|
|
32
33
|
let buildError = false;
|
|
33
34
|
|
|
34
|
-
const DIR_PATH = process.cwd();
|
|
35
35
|
const OUTPUT_FILE_NAME = "elm.js";
|
|
36
36
|
|
|
37
37
|
process.on("unhandledRejection", (error) => {
|
|
@@ -39,11 +39,9 @@ process.on("unhandledRejection", (error) => {
|
|
|
39
39
|
process.exitCode = 1;
|
|
40
40
|
});
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
OUTPUT_FILE_NAME
|
|
46
|
-
);
|
|
42
|
+
function ELM_FILE_PATH() {
|
|
43
|
+
return path.join(process.cwd(), "./elm-stuff/elm-pages", OUTPUT_FILE_NAME);
|
|
44
|
+
}
|
|
47
45
|
|
|
48
46
|
async function ensureRequiredDirs() {
|
|
49
47
|
ensureDirSync(`dist`);
|
|
@@ -68,11 +66,21 @@ async function ensureRequiredExecutables() {
|
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
68
|
|
|
71
|
-
async function run(options) {
|
|
69
|
+
export async function run(options) {
|
|
70
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
71
|
+
const __dirname = path.dirname(__filename);
|
|
72
|
+
console.warn = function (...messages) {
|
|
73
|
+
// This is a temporary hack to avoid this warning. elm-pages manages compiling the Elm code without Vite's involvement, so it is external to Vite.
|
|
74
|
+
// There is a pending issue to allow having external scripts in Vite, once this issue is fixed we can remove this hack:
|
|
75
|
+
// https://github.com/vitejs/vite/issues/3533
|
|
76
|
+
if (!messages[0]?.startsWith(`<script src="/elm.js">`)) {
|
|
77
|
+
console.info(...messages);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
72
80
|
try {
|
|
73
81
|
await ensureRequiredDirs();
|
|
74
82
|
await ensureRequiredExecutables();
|
|
75
|
-
// since init/update are never called in pre-renders, and
|
|
83
|
+
// since init/update are never called in pre-renders, and BackendTask.Http is called using pure NodeJS HTTP fetching
|
|
76
84
|
// we can provide a fake HTTP instead of xhr2 (which is otherwise needed for Elm HTTP requests from Node)
|
|
77
85
|
|
|
78
86
|
const generateCode = codegen.generate(options.base);
|
|
@@ -98,6 +106,9 @@ async function run(options) {
|
|
|
98
106
|
input: "elm-stuff/elm-pages/index.html",
|
|
99
107
|
},
|
|
100
108
|
},
|
|
109
|
+
optimizeDeps: {
|
|
110
|
+
include: [],
|
|
111
|
+
},
|
|
101
112
|
},
|
|
102
113
|
config.vite || {}
|
|
103
114
|
);
|
|
@@ -113,7 +124,9 @@ async function run(options) {
|
|
|
113
124
|
withoutExtension
|
|
114
125
|
);
|
|
115
126
|
const assetManifestPath = path.join(process.cwd(), "dist/manifest.json");
|
|
116
|
-
const manifest =
|
|
127
|
+
const manifest = JSON.parse(
|
|
128
|
+
await fsPromises.readFile(assetManifestPath, { encoding: "utf-8" })
|
|
129
|
+
);
|
|
117
130
|
const indexTemplate = await fsPromises.readFile(
|
|
118
131
|
"dist/elm-stuff/elm-pages/index.html",
|
|
119
132
|
"utf-8"
|
|
@@ -143,18 +156,18 @@ async function run(options) {
|
|
|
143
156
|
);
|
|
144
157
|
await fsPromises.writeFile("dist/template.html", processedIndexTemplate);
|
|
145
158
|
await fsPromises.unlink(assetManifestPath);
|
|
146
|
-
|
|
147
|
-
const portDataSourceCompiled = esbuild
|
|
159
|
+
const portBackendTaskCompiled = esbuild
|
|
148
160
|
.build({
|
|
149
|
-
entryPoints: ["./
|
|
161
|
+
entryPoints: ["./custom-backend-task"],
|
|
150
162
|
platform: "node",
|
|
151
|
-
outfile: ".elm-pages/compiled-ports/
|
|
163
|
+
outfile: ".elm-pages/compiled-ports/custom-backend-task.mjs",
|
|
152
164
|
assetNames: "[name]-[hash]",
|
|
153
165
|
chunkNames: "chunks/[name]-[hash]",
|
|
154
166
|
outExtension: { ".js": ".js" },
|
|
155
167
|
metafile: true,
|
|
156
168
|
bundle: true,
|
|
157
|
-
|
|
169
|
+
format: "esm",
|
|
170
|
+
packages: "external",
|
|
158
171
|
logLevel: "silent",
|
|
159
172
|
})
|
|
160
173
|
.then((result) => {
|
|
@@ -163,21 +176,92 @@ async function run(options) {
|
|
|
163
176
|
} catch (e) {}
|
|
164
177
|
})
|
|
165
178
|
.catch((error) => {
|
|
166
|
-
const
|
|
167
|
-
globby.
|
|
168
|
-
if (
|
|
169
|
-
// don't present error if there are no files matching
|
|
170
|
-
// if there are files matching
|
|
171
|
-
console.error("Failed to start
|
|
179
|
+
const portBackendTaskFileFound =
|
|
180
|
+
globby.globbySync("./custom-backend-task.*").length > 0;
|
|
181
|
+
if (portBackendTaskFileFound) {
|
|
182
|
+
// don't present error if there are no files matching custom-backend-task
|
|
183
|
+
// if there are files matching custom-backend-task, warn the user in case something went wrong loading it
|
|
184
|
+
console.error("Failed to start custom-backend-task watcher", error);
|
|
172
185
|
}
|
|
173
186
|
});
|
|
174
|
-
// TODO extract common code for compiling ports file?
|
|
175
187
|
|
|
176
|
-
XMLHttpRequest = {};
|
|
188
|
+
global.XMLHttpRequest = {};
|
|
177
189
|
const compileCli = compileCliApp(options);
|
|
178
190
|
try {
|
|
179
191
|
await compileCli;
|
|
180
192
|
await compileClientDone;
|
|
193
|
+
await portBackendTaskCompiled;
|
|
194
|
+
const inlineRenderCode = `
|
|
195
|
+
import * as renderer from "./render.js";
|
|
196
|
+
import * as elmModule from "${path.resolve("./elm-stuff/elm-pages/elm.cjs")}";
|
|
197
|
+
import * as url from 'url';
|
|
198
|
+
${
|
|
199
|
+
global.portsFilePath
|
|
200
|
+
? `import * as customBackendTask from "${path.resolve(
|
|
201
|
+
global.portsFilePath
|
|
202
|
+
)}";`
|
|
203
|
+
: `const customBackendTask = {};`
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
import * as preRenderHtml from "./pre-render-html.js";
|
|
207
|
+
const basePath = \`${options.base || "/"}\`;
|
|
208
|
+
const htmlTemplate = ${JSON.stringify(processedIndexTemplate)};
|
|
209
|
+
const mode = "build";
|
|
210
|
+
const addWatcher = () => {};
|
|
211
|
+
|
|
212
|
+
export async function render(request) {
|
|
213
|
+
const requestTime = new Date();
|
|
214
|
+
const response = await renderer.render(
|
|
215
|
+
customBackendTask,
|
|
216
|
+
basePath,
|
|
217
|
+
elmModule.default,
|
|
218
|
+
mode,
|
|
219
|
+
(new url.URL(request.rawUrl)).pathname,
|
|
220
|
+
request,
|
|
221
|
+
addWatcher,
|
|
222
|
+
false
|
|
223
|
+
);
|
|
224
|
+
console.dir(response);
|
|
225
|
+
if (response.kind === "bytes") {
|
|
226
|
+
return {
|
|
227
|
+
body: response.contentDatPayload.buffer,
|
|
228
|
+
statusCode: response.statusCode,
|
|
229
|
+
kind: response.kind,
|
|
230
|
+
headers: response.headers,
|
|
231
|
+
}
|
|
232
|
+
} else if (response.kind === "api-response") {
|
|
233
|
+
// isBase64Encoded
|
|
234
|
+
return {
|
|
235
|
+
body: response.body.body,
|
|
236
|
+
statusCode: response.statusCode,
|
|
237
|
+
kind: response.kind,
|
|
238
|
+
headers: response.headers,
|
|
239
|
+
isBase64Encoded: response.body.isBase64Encoded,
|
|
240
|
+
}
|
|
241
|
+
} else {
|
|
242
|
+
return {
|
|
243
|
+
body: preRenderHtml.replaceTemplate(htmlTemplate, response.htmlString),
|
|
244
|
+
statusCode: response.statusCode,
|
|
245
|
+
kind: response.kind,
|
|
246
|
+
headers: response.headers,
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
`;
|
|
251
|
+
await esbuild.build({
|
|
252
|
+
format: "esm",
|
|
253
|
+
platform: "node",
|
|
254
|
+
stdin: { contents: inlineRenderCode, resolveDir: __dirname },
|
|
255
|
+
bundle: true,
|
|
256
|
+
// TODO do I need to make the outfile joined with the current working directory?
|
|
257
|
+
|
|
258
|
+
outfile: ".elm-pages/compiled/render.mjs",
|
|
259
|
+
// external: ["node:*", ...options.external],
|
|
260
|
+
packages: "external",
|
|
261
|
+
minify: true,
|
|
262
|
+
// absWorkingDir: projectDirectory,
|
|
263
|
+
// banner: { js: `#!/usr/bin/env node\n\n${ESM_REQUIRE_SHIM}` },
|
|
264
|
+
});
|
|
181
265
|
} catch (cliError) {
|
|
182
266
|
// TODO make sure not to print duplicate error output if cleaner review output is printed
|
|
183
267
|
console.error(cliError);
|
|
@@ -192,7 +276,7 @@ async function run(options) {
|
|
|
192
276
|
}
|
|
193
277
|
process.exit(1);
|
|
194
278
|
}
|
|
195
|
-
await
|
|
279
|
+
await portBackendTaskCompiled;
|
|
196
280
|
const cliDone = runCli(options);
|
|
197
281
|
await cliDone;
|
|
198
282
|
|
|
@@ -210,8 +294,9 @@ async function run(options) {
|
|
|
210
294
|
processedIndexTemplate
|
|
211
295
|
);
|
|
212
296
|
} catch (error) {
|
|
297
|
+
console.trace(error);
|
|
213
298
|
if (error) {
|
|
214
|
-
console.error(error);
|
|
299
|
+
console.error(restoreColorSafe(error));
|
|
215
300
|
}
|
|
216
301
|
buildError = true;
|
|
217
302
|
process.exitCode = 1;
|
|
@@ -223,6 +308,8 @@ async function run(options) {
|
|
|
223
308
|
*/
|
|
224
309
|
function initWorker(basePath, whenDone) {
|
|
225
310
|
return new Promise((resolve, reject) => {
|
|
311
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
312
|
+
const __dirname = path.dirname(__filename);
|
|
226
313
|
activeWorkers += 1;
|
|
227
314
|
let newWorker = {
|
|
228
315
|
worker: new Worker(path.join(__dirname, "./render-worker.js"), {
|
|
@@ -351,7 +438,7 @@ async function fingerprintElmAsset(fullOutputPath, withoutExtension) {
|
|
|
351
438
|
return fileHash;
|
|
352
439
|
}
|
|
353
440
|
|
|
354
|
-
function elmOptimizeLevel2(outputPath, cwd) {
|
|
441
|
+
export function elmOptimizeLevel2(outputPath, cwd) {
|
|
355
442
|
return new Promise((resolve, reject) => {
|
|
356
443
|
const optimizedOutputPath = outputPath + ".opt";
|
|
357
444
|
const subprocess = spawnCallback(
|
|
@@ -372,7 +459,7 @@ function elmOptimizeLevel2(outputPath, cwd) {
|
|
|
372
459
|
|
|
373
460
|
subprocess.on("close", async (code) => {
|
|
374
461
|
if (code === 0) {
|
|
375
|
-
await
|
|
462
|
+
await copyFile(optimizedOutputPath, outputPath);
|
|
376
463
|
resolve();
|
|
377
464
|
} else {
|
|
378
465
|
if (!buildError) {
|
|
@@ -411,7 +498,7 @@ async function spawnElmMake(mode, options, elmEntrypointPath, outputPath, cwd) {
|
|
|
411
498
|
"function appendSubmitter (myFormData, event) { event.submitter && event.submitter.name && event.submitter.name.length > 0 ? myFormData.append(event.submitter.name, event.submitter.value) : myFormData; return myFormData }; return " +
|
|
412
499
|
(options.debug
|
|
413
500
|
? "_Json_wrap(Array.from(appendSubmitter(new FormData(_Json_unwrap(event).target), _Json_unwrap(event))))"
|
|
414
|
-
: "
|
|
501
|
+
: "[...(appendSubmitter(new FormData(event.target), event))]")
|
|
415
502
|
)
|
|
416
503
|
);
|
|
417
504
|
}
|
|
@@ -441,8 +528,9 @@ function modeToOptions(mode) {
|
|
|
441
528
|
*/
|
|
442
529
|
function runElmMake(mode, options, elmEntrypointPath, outputPath, cwd) {
|
|
443
530
|
return new Promise(async (resolve, reject) => {
|
|
531
|
+
const executableName = options.executableName || "lamdera";
|
|
444
532
|
const subprocess = spawnCallback(
|
|
445
|
-
|
|
533
|
+
executableName,
|
|
446
534
|
[
|
|
447
535
|
"make",
|
|
448
536
|
elmEntrypointPath,
|
|
@@ -499,7 +587,7 @@ function runElmMake(mode, options, elmEntrypointPath, outputPath, cwd) {
|
|
|
499
587
|
/**
|
|
500
588
|
* @param {string} filePath
|
|
501
589
|
*/
|
|
502
|
-
async function runTerser(filePath) {
|
|
590
|
+
export async function runTerser(filePath) {
|
|
503
591
|
console.log("Running terser");
|
|
504
592
|
const minifiedElm = await terser.minify(
|
|
505
593
|
(await fsPromises.readFile(filePath)).toString(),
|
|
@@ -542,7 +630,7 @@ async function runTerser(filePath) {
|
|
|
542
630
|
}
|
|
543
631
|
}
|
|
544
632
|
|
|
545
|
-
async function compileCliApp(options) {
|
|
633
|
+
export async function compileCliApp(options) {
|
|
546
634
|
await spawnElmMake(
|
|
547
635
|
// TODO should be --optimize, but there seems to be an issue with the html to JSON with --optimize
|
|
548
636
|
options.debug ? "debug" : "optimize",
|
|
@@ -552,7 +640,7 @@ async function compileCliApp(options) {
|
|
|
552
640
|
path.join(process.cwd(), "elm-stuff/elm-pages")
|
|
553
641
|
);
|
|
554
642
|
|
|
555
|
-
const elmFileContent = await fsPromises.readFile(ELM_FILE_PATH, "utf-8");
|
|
643
|
+
const elmFileContent = await fsPromises.readFile(ELM_FILE_PATH(), "utf-8");
|
|
556
644
|
// Source: https://github.com/elm-explorations/test/blob/d5eb84809de0f8bbf50303efd26889092c800609/src/Elm/Kernel/HtmlAsJson.js
|
|
557
645
|
const forceThunksSource = ` _HtmlAsJson_toJson(x)
|
|
558
646
|
}
|
|
@@ -598,7 +686,7 @@ function _HtmlAsJson_toJson(html) {
|
|
|
598
686
|
`;
|
|
599
687
|
|
|
600
688
|
await fsPromises.writeFile(
|
|
601
|
-
ELM_FILE_PATH,
|
|
689
|
+
ELM_FILE_PATH().replace(/\.js$/, ".cjs"),
|
|
602
690
|
elmFileContent
|
|
603
691
|
.replace(
|
|
604
692
|
/return \$elm\$json\$Json\$Encode\$string\(.REPLACE_ME_WITH_JSON_STRINGIFY.\)/g,
|
|
@@ -613,19 +701,17 @@ function _HtmlAsJson_toJson(html) {
|
|
|
613
701
|
async function runAdapter(adaptFn, processedIndexTemplate) {
|
|
614
702
|
try {
|
|
615
703
|
await adaptFn({
|
|
616
|
-
renderFunctionFilePath: "
|
|
704
|
+
renderFunctionFilePath: "./.elm-pages/compiled/render.mjs",
|
|
617
705
|
routePatterns: JSON.parse(
|
|
618
706
|
await fsPromises.readFile("./dist/route-patterns.json", "utf-8")
|
|
619
707
|
),
|
|
620
708
|
apiRoutePatterns: JSON.parse(
|
|
621
709
|
await fsPromises.readFile("./dist/api-patterns.json", "utf-8")
|
|
622
710
|
),
|
|
623
|
-
portsFilePath: "./.elm-pages/compiled-ports/port-data-source.js",
|
|
624
|
-
htmlTemplate: processedIndexTemplate,
|
|
625
711
|
});
|
|
626
712
|
console.log("Success - Adapter script complete");
|
|
627
713
|
} catch (error) {
|
|
628
|
-
console.
|
|
714
|
+
console.trace("ERROR - Adapter script failed", error);
|
|
629
715
|
try {
|
|
630
716
|
console.error(JSON.stringify(error));
|
|
631
717
|
} catch (parsingError) {
|
|
@@ -674,5 +760,3 @@ function defaultPreloadForFile(file) {
|
|
|
674
760
|
* @param {string} contentJsonString
|
|
675
761
|
* @returns {string}
|
|
676
762
|
*/
|
|
677
|
-
|
|
678
|
-
module.exports = { run };
|