elm-pages 3.0.0-beta.3 → 3.0.0-beta.30
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 +10 -1
- package/codegen/{elm-pages-codegen.js → elm-pages-codegen.cjs} +2864 -2589
- 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 +1327 -122
- package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +15295 -13271
- 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/elm.json +8 -6
- package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +59 -10
- package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +52 -36
- 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 +1327 -122
- package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +14621 -12637
- 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/review/elm.json +8 -8
- package/generator/src/RouteBuilder.elm +113 -107
- package/generator/src/SharedTemplate.elm +3 -2
- package/generator/src/SiteConfig.elm +3 -2
- package/generator/src/basepath-middleware.js +3 -3
- package/generator/src/build.js +123 -87
- package/generator/src/cli.js +256 -77
- package/generator/src/codegen.js +29 -27
- package/generator/src/compatibility-key.js +3 -0
- package/generator/src/compile-elm.js +25 -25
- package/generator/src/config.js +39 -0
- package/generator/src/copy-dir.js +2 -2
- package/generator/src/dev-server.js +150 -133
- 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 -22
- package/generator/src/init.js +9 -8
- package/generator/src/pre-render-html.js +39 -28
- package/generator/src/render-test.js +109 -0
- package/generator/src/render-worker.js +25 -28
- package/generator/src/render.js +322 -142
- package/generator/src/request-cache.js +252 -163
- package/generator/src/rewrite-client-elm-json.js +5 -5
- package/generator/src/rewrite-elm-json.js +7 -7
- package/generator/src/route-codegen-helpers.js +16 -31
- package/generator/src/seo-renderer.js +12 -7
- package/generator/src/vite-utils.js +77 -0
- package/generator/static-code/hmr.js +79 -13
- package/generator/template/app/Api.elm +6 -5
- package/generator/template/app/Effect.elm +123 -0
- package/generator/template/app/ErrorPage.elm +37 -6
- package/generator/template/app/Route/Index.elm +17 -10
- package/generator/template/app/Shared.elm +24 -47
- package/generator/template/app/Site.elm +19 -6
- package/generator/template/app/View.elm +1 -8
- package/generator/template/elm-tooling.json +0 -3
- package/generator/template/elm.json +34 -25
- package/generator/template/package.json +10 -4
- package/package.json +23 -22
- package/src/ApiRoute.elm +199 -61
- package/src/BackendTask/Custom.elm +325 -0
- package/src/BackendTask/Env.elm +90 -0
- package/src/{DataSource → BackendTask}/File.elm +128 -43
- package/src/{DataSource → BackendTask}/Glob.elm +136 -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/Random.elm +79 -0
- package/src/BackendTask/Time.elm +47 -0
- package/src/BackendTask.elm +537 -0
- package/src/FatalError.elm +89 -0
- package/src/Form/Field.elm +21 -9
- package/src/Form/FieldView.elm +94 -14
- package/src/Form.elm +275 -400
- package/src/Head.elm +237 -7
- package/src/HtmlPrinter.elm +7 -3
- package/src/Internal/ApiRoute.elm +7 -5
- package/src/PageServerResponse.elm +6 -1
- package/src/Pages/FormState.elm +6 -5
- package/src/Pages/GeneratorProgramConfig.elm +15 -0
- package/src/Pages/Internal/FatalError.elm +5 -0
- package/src/Pages/Internal/Form.elm +21 -1
- package/src/Pages/{Msg.elm → Internal/Msg.elm} +26 -16
- package/src/Pages/Internal/Platform/Cli.elm +507 -763
- package/src/Pages/Internal/Platform/CompatibilityKey.elm +6 -0
- package/src/Pages/Internal/Platform/Effect.elm +1 -2
- package/src/Pages/Internal/Platform/GeneratorApplication.elm +373 -0
- package/src/Pages/Internal/Platform/StaticResponses.elm +73 -270
- package/src/Pages/Internal/Platform/ToJsPayload.elm +4 -7
- package/src/Pages/Internal/Platform.elm +215 -102
- package/src/Pages/Internal/Script.elm +17 -0
- package/src/Pages/Internal/StaticHttpBody.elm +35 -1
- package/src/Pages/Manifest.elm +29 -4
- package/src/Pages/PageUrl.elm +23 -9
- package/src/Pages/ProgramConfig.elm +14 -10
- package/src/Pages/Script.elm +109 -0
- package/src/Pages/SiteConfig.elm +3 -2
- package/src/Pages/StaticHttp/Request.elm +2 -2
- package/src/Pages/StaticHttpRequest.elm +23 -98
- package/src/PagesMsg.elm +92 -0
- package/src/Path.elm +16 -19
- package/src/QueryParams.elm +21 -172
- package/src/RequestsAndPending.elm +8 -19
- package/src/Result/Extra.elm +26 -0
- package/src/Scaffold/Form.elm +484 -0
- package/src/Scaffold/Route.elm +1376 -0
- package/src/Server/Request.elm +43 -37
- package/src/Server/Session.elm +34 -34
- package/src/Server/SetCookie.elm +1 -1
- package/src/Test/Html/Internal/ElmHtml/ToString.elm +8 -9
- 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 -538
- package/src/Pages/Generate.elm +0 -800
package/generator/src/build.js
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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";
|
|
19
23
|
|
|
20
24
|
let pool = [];
|
|
21
25
|
let pagesReady;
|
|
@@ -28,7 +32,6 @@ let pagesReadyCalled = false;
|
|
|
28
32
|
let activeWorkers = 0;
|
|
29
33
|
let buildError = false;
|
|
30
34
|
|
|
31
|
-
const DIR_PATH = process.cwd();
|
|
32
35
|
const OUTPUT_FILE_NAME = "elm.js";
|
|
33
36
|
|
|
34
37
|
process.on("unhandledRejection", (error) => {
|
|
@@ -36,11 +39,9 @@ process.on("unhandledRejection", (error) => {
|
|
|
36
39
|
process.exitCode = 1;
|
|
37
40
|
});
|
|
38
41
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
OUTPUT_FILE_NAME
|
|
43
|
-
);
|
|
42
|
+
function ELM_FILE_PATH() {
|
|
43
|
+
return path.join(process.cwd(), "./elm-stuff/elm-pages", OUTPUT_FILE_NAME);
|
|
44
|
+
}
|
|
44
45
|
|
|
45
46
|
async function ensureRequiredDirs() {
|
|
46
47
|
ensureDirSync(`dist`);
|
|
@@ -65,50 +66,41 @@ async function ensureRequiredExecutables() {
|
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
|
|
68
|
-
async function run(options) {
|
|
69
|
+
export async function run(options) {
|
|
69
70
|
try {
|
|
70
71
|
await ensureRequiredDirs();
|
|
71
72
|
await ensureRequiredExecutables();
|
|
72
|
-
// since init/update are never called in pre-renders, and
|
|
73
|
+
// since init/update are never called in pre-renders, and BackendTask.Http is called using pure NodeJS HTTP fetching
|
|
73
74
|
// we can provide a fake HTTP instead of xhr2 (which is otherwise needed for Elm HTTP requests from Node)
|
|
74
75
|
|
|
75
76
|
const generateCode = codegen.generate(options.base);
|
|
76
77
|
|
|
77
78
|
await generateCode;
|
|
79
|
+
|
|
80
|
+
const config = await resolveConfig();
|
|
78
81
|
await fsPromises.writeFile(
|
|
79
82
|
"elm-stuff/elm-pages/index.html",
|
|
80
|
-
preRenderHtml.templateHtml()
|
|
83
|
+
preRenderHtml.templateHtml(false, config.headTagsTemplate)
|
|
81
84
|
);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const viteConfig = config.vite || {};
|
|
96
|
-
|
|
97
|
-
const buildComplete = build({
|
|
98
|
-
configFile: false,
|
|
99
|
-
root: process.cwd(),
|
|
100
|
-
base: options.base,
|
|
101
|
-
ssr: false,
|
|
102
|
-
|
|
103
|
-
build: {
|
|
104
|
-
manifest: true,
|
|
105
|
-
outDir: "dist",
|
|
106
|
-
rollupOptions: {
|
|
107
|
-
input: "elm-stuff/elm-pages/index.html",
|
|
85
|
+
const viteConfig = merge_vite_configs(
|
|
86
|
+
{
|
|
87
|
+
configFile: false,
|
|
88
|
+
root: process.cwd(),
|
|
89
|
+
base: options.base,
|
|
90
|
+
ssr: false,
|
|
91
|
+
|
|
92
|
+
build: {
|
|
93
|
+
manifest: true,
|
|
94
|
+
outDir: "dist",
|
|
95
|
+
rollupOptions: {
|
|
96
|
+
input: "elm-stuff/elm-pages/index.html",
|
|
97
|
+
},
|
|
108
98
|
},
|
|
109
99
|
},
|
|
110
|
-
|
|
111
|
-
|
|
100
|
+
config.vite || {}
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const buildComplete = build(viteConfig);
|
|
112
104
|
const compileClientDone = compileElm(options);
|
|
113
105
|
await buildComplete;
|
|
114
106
|
await compileClientDone;
|
|
@@ -119,53 +111,71 @@ async function run(options) {
|
|
|
119
111
|
withoutExtension
|
|
120
112
|
);
|
|
121
113
|
const assetManifestPath = path.join(process.cwd(), "dist/manifest.json");
|
|
122
|
-
const manifest =
|
|
114
|
+
const manifest = (
|
|
115
|
+
await import(assetManifestPath, {
|
|
116
|
+
assert: { type: "json" },
|
|
117
|
+
})
|
|
118
|
+
).default;
|
|
123
119
|
const indexTemplate = await fsPromises.readFile(
|
|
124
120
|
"dist/elm-stuff/elm-pages/index.html",
|
|
125
121
|
"utf-8"
|
|
126
122
|
);
|
|
127
|
-
const
|
|
123
|
+
const preloadFiles = [
|
|
124
|
+
`elm.${browserElmHash}.js`,
|
|
125
|
+
...Object.entries(manifest).map((entry) => entry[1].file),
|
|
126
|
+
].map((file) => path.join(options.base, file));
|
|
127
|
+
const userProcessedPreloads = preloadFiles.flatMap((file) => {
|
|
128
|
+
const userPreloadForFile = config.preloadTagForFile(file);
|
|
129
|
+
if (userPreloadForFile === true) {
|
|
130
|
+
return [defaultPreloadForFile(file)];
|
|
131
|
+
} else if (userPreloadForFile === false) {
|
|
132
|
+
return [];
|
|
133
|
+
} else if (typeof userPreloadForFile === "string") {
|
|
134
|
+
return [userPreloadForFile];
|
|
135
|
+
} else {
|
|
136
|
+
throw `I expected preloadTagForFile in elm-pages.config.mjs to return a string or boolean, but instead it returned: ${userPreloadForFile}`;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
128
139
|
|
|
129
140
|
const processedIndexTemplate = indexTemplate
|
|
130
|
-
.replace("<!-- PLACEHOLDER_PRELOADS -->",
|
|
141
|
+
.replace("<!-- PLACEHOLDER_PRELOADS -->", userProcessedPreloads.join(""))
|
|
131
142
|
.replace(
|
|
132
143
|
'<script defer src="/elm.js" type="text/javascript"></script>',
|
|
133
144
|
`<script defer src="/elm.${browserElmHash}.js" type="text/javascript"></script>`
|
|
134
145
|
);
|
|
135
146
|
await fsPromises.writeFile("dist/template.html", processedIndexTemplate);
|
|
136
147
|
await fsPromises.unlink(assetManifestPath);
|
|
137
|
-
|
|
138
|
-
const portDataSourceCompiled = esbuild
|
|
148
|
+
const portBackendTaskCompiled = esbuild
|
|
139
149
|
.build({
|
|
140
|
-
entryPoints: ["./
|
|
150
|
+
entryPoints: ["./custom-backend-task"],
|
|
141
151
|
platform: "node",
|
|
142
|
-
outfile: ".elm-pages/compiled-ports/
|
|
152
|
+
outfile: ".elm-pages/compiled-ports/custom-backend-task.mjs",
|
|
143
153
|
assetNames: "[name]-[hash]",
|
|
144
154
|
chunkNames: "chunks/[name]-[hash]",
|
|
145
155
|
outExtension: { ".js": ".js" },
|
|
146
156
|
metafile: true,
|
|
147
157
|
bundle: true,
|
|
148
|
-
|
|
149
|
-
|
|
158
|
+
format: "esm",
|
|
159
|
+
packages: "external",
|
|
160
|
+
logLevel: "silent",
|
|
150
161
|
})
|
|
151
162
|
.then((result) => {
|
|
152
|
-
|
|
163
|
+
try {
|
|
164
|
+
global.portsFilePath = Object.keys(result.metafile.outputs)[0];
|
|
165
|
+
} catch (e) {}
|
|
153
166
|
})
|
|
154
167
|
.catch((error) => {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
console.warn("No port-data-source file found.");
|
|
162
|
-
} else {
|
|
163
|
-
console.error("Failed to load port-data-source file", error);
|
|
168
|
+
const portBackendTaskFileFound =
|
|
169
|
+
globby.globbySync("./custom-backend-task.*").length > 0;
|
|
170
|
+
if (portBackendTaskFileFound) {
|
|
171
|
+
// don't present error if there are no files matching custom-backend-task
|
|
172
|
+
// if there are files matching custom-backend-task, warn the user in case something went wrong loading it
|
|
173
|
+
console.error("Failed to start custom-backend-task watcher", error);
|
|
164
174
|
}
|
|
165
175
|
});
|
|
166
176
|
// TODO extract common code for compiling ports file?
|
|
167
177
|
|
|
168
|
-
XMLHttpRequest = {};
|
|
178
|
+
global.XMLHttpRequest = {};
|
|
169
179
|
const compileCli = compileCliApp(options);
|
|
170
180
|
try {
|
|
171
181
|
await compileCli;
|
|
@@ -184,7 +194,7 @@ async function run(options) {
|
|
|
184
194
|
}
|
|
185
195
|
process.exit(1);
|
|
186
196
|
}
|
|
187
|
-
await
|
|
197
|
+
await portBackendTaskCompiled;
|
|
188
198
|
const cliDone = runCli(options);
|
|
189
199
|
await cliDone;
|
|
190
200
|
|
|
@@ -202,8 +212,9 @@ async function run(options) {
|
|
|
202
212
|
processedIndexTemplate
|
|
203
213
|
);
|
|
204
214
|
} catch (error) {
|
|
215
|
+
console.trace(error);
|
|
205
216
|
if (error) {
|
|
206
|
-
console.error(error);
|
|
217
|
+
console.error(restoreColorSafe(error));
|
|
207
218
|
}
|
|
208
219
|
buildError = true;
|
|
209
220
|
process.exitCode = 1;
|
|
@@ -215,6 +226,8 @@ async function run(options) {
|
|
|
215
226
|
*/
|
|
216
227
|
function initWorker(basePath, whenDone) {
|
|
217
228
|
return new Promise((resolve, reject) => {
|
|
229
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
230
|
+
const __dirname = path.dirname(__filename);
|
|
218
231
|
activeWorkers += 1;
|
|
219
232
|
let newWorker = {
|
|
220
233
|
worker: new Worker(path.join(__dirname, "./render-worker.js"), {
|
|
@@ -343,7 +356,7 @@ async function fingerprintElmAsset(fullOutputPath, withoutExtension) {
|
|
|
343
356
|
return fileHash;
|
|
344
357
|
}
|
|
345
358
|
|
|
346
|
-
function elmOptimizeLevel2(outputPath, cwd) {
|
|
359
|
+
export function elmOptimizeLevel2(outputPath, cwd) {
|
|
347
360
|
return new Promise((resolve, reject) => {
|
|
348
361
|
const optimizedOutputPath = outputPath + ".opt";
|
|
349
362
|
const subprocess = spawnCallback(
|
|
@@ -364,7 +377,7 @@ function elmOptimizeLevel2(outputPath, cwd) {
|
|
|
364
377
|
|
|
365
378
|
subprocess.on("close", async (code) => {
|
|
366
379
|
if (code === 0) {
|
|
367
|
-
await
|
|
380
|
+
await copyFile(optimizedOutputPath, outputPath);
|
|
368
381
|
resolve();
|
|
369
382
|
} else {
|
|
370
383
|
if (!buildError) {
|
|
@@ -403,7 +416,7 @@ async function spawnElmMake(mode, options, elmEntrypointPath, outputPath, cwd) {
|
|
|
403
416
|
"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 " +
|
|
404
417
|
(options.debug
|
|
405
418
|
? "_Json_wrap(Array.from(appendSubmitter(new FormData(_Json_unwrap(event).target), _Json_unwrap(event))))"
|
|
406
|
-
: "
|
|
419
|
+
: "[...(appendSubmitter(new FormData(event.target), event))]")
|
|
407
420
|
)
|
|
408
421
|
);
|
|
409
422
|
}
|
|
@@ -534,7 +547,7 @@ async function runTerser(filePath) {
|
|
|
534
547
|
}
|
|
535
548
|
}
|
|
536
549
|
|
|
537
|
-
async function compileCliApp(options) {
|
|
550
|
+
export async function compileCliApp(options) {
|
|
538
551
|
await spawnElmMake(
|
|
539
552
|
// TODO should be --optimize, but there seems to be an issue with the html to JSON with --optimize
|
|
540
553
|
options.debug ? "debug" : "optimize",
|
|
@@ -544,7 +557,7 @@ async function compileCliApp(options) {
|
|
|
544
557
|
path.join(process.cwd(), "elm-stuff/elm-pages")
|
|
545
558
|
);
|
|
546
559
|
|
|
547
|
-
const elmFileContent = await fsPromises.readFile(ELM_FILE_PATH, "utf-8");
|
|
560
|
+
const elmFileContent = await fsPromises.readFile(ELM_FILE_PATH(), "utf-8");
|
|
548
561
|
// Source: https://github.com/elm-explorations/test/blob/d5eb84809de0f8bbf50303efd26889092c800609/src/Elm/Kernel/HtmlAsJson.js
|
|
549
562
|
const forceThunksSource = ` _HtmlAsJson_toJson(x)
|
|
550
563
|
}
|
|
@@ -590,7 +603,7 @@ function _HtmlAsJson_toJson(html) {
|
|
|
590
603
|
`;
|
|
591
604
|
|
|
592
605
|
await fsPromises.writeFile(
|
|
593
|
-
ELM_FILE_PATH,
|
|
606
|
+
ELM_FILE_PATH().replace(/\.js$/, ".cjs"),
|
|
594
607
|
elmFileContent
|
|
595
608
|
.replace(
|
|
596
609
|
/return \$elm\$json\$Json\$Encode\$string\(.REPLACE_ME_WITH_JSON_STRINGIFY.\)/g,
|
|
@@ -605,14 +618,14 @@ function _HtmlAsJson_toJson(html) {
|
|
|
605
618
|
async function runAdapter(adaptFn, processedIndexTemplate) {
|
|
606
619
|
try {
|
|
607
620
|
await adaptFn({
|
|
608
|
-
renderFunctionFilePath: "./elm-stuff/elm-pages/elm.
|
|
621
|
+
renderFunctionFilePath: "./elm-stuff/elm-pages/elm.cjs",
|
|
609
622
|
routePatterns: JSON.parse(
|
|
610
623
|
await fsPromises.readFile("./dist/route-patterns.json", "utf-8")
|
|
611
624
|
),
|
|
612
625
|
apiRoutePatterns: JSON.parse(
|
|
613
626
|
await fsPromises.readFile("./dist/api-patterns.json", "utf-8")
|
|
614
627
|
),
|
|
615
|
-
portsFilePath: "./.elm-pages/compiled-ports/
|
|
628
|
+
portsFilePath: "./.elm-pages/compiled-ports/custom-backend-task.mjs",
|
|
616
629
|
htmlTemplate: processedIndexTemplate,
|
|
617
630
|
});
|
|
618
631
|
console.log("Success - Adapter script complete");
|
|
@@ -627,6 +640,31 @@ async function runAdapter(adaptFn, processedIndexTemplate) {
|
|
|
627
640
|
}
|
|
628
641
|
}
|
|
629
642
|
|
|
643
|
+
// Source: https://github.com/vitejs/vite/blob/c53ffec3465d2d28d08d29ca61313469e03f5dd6/playground/ssr-vue/src/entry-server.js#L50-L68
|
|
644
|
+
/**
|
|
645
|
+
* @param {string} file
|
|
646
|
+
*/
|
|
647
|
+
function defaultPreloadForFile(file) {
|
|
648
|
+
if (file.endsWith(".js")) {
|
|
649
|
+
return `<link rel="modulepreload" crossorigin href="${file}">`;
|
|
650
|
+
} else if (file.endsWith(".css")) {
|
|
651
|
+
return `<link rel="preload" href="${file}" as="style">`;
|
|
652
|
+
} else if (file.endsWith(".woff")) {
|
|
653
|
+
return ` <link rel="preload" href="${file}" as="font" type="font/woff" crossorigin>`;
|
|
654
|
+
} else if (file.endsWith(".woff2")) {
|
|
655
|
+
return ` <link rel="preload" href="${file}" as="font" type="font/woff2" crossorigin>`;
|
|
656
|
+
} else if (file.endsWith(".gif")) {
|
|
657
|
+
return ` <link rel="preload" href="${file}" as="image" type="image/gif">`;
|
|
658
|
+
} else if (file.endsWith(".jpg") || file.endsWith(".jpeg")) {
|
|
659
|
+
return ` <link rel="preload" href="${file}" as="image" type="image/jpeg">`;
|
|
660
|
+
} else if (file.endsWith(".png")) {
|
|
661
|
+
return ` <link rel="preload" href="${file}" as="image" type="image/png">`;
|
|
662
|
+
} else {
|
|
663
|
+
// TODO
|
|
664
|
+
return "";
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
|
|
630
668
|
/** @typedef { { route : string; contentJson : string; head : SeoTag[]; html: string; body: string; } } FromElm */
|
|
631
669
|
/** @typedef {HeadTag | JsonLdTag} SeoTag */
|
|
632
670
|
/** @typedef {{ name: string; attributes: string[][]; type: 'head' }} HeadTag */
|
|
@@ -641,5 +679,3 @@ async function runAdapter(adaptFn, processedIndexTemplate) {
|
|
|
641
679
|
* @param {string} contentJsonString
|
|
642
680
|
* @returns {string}
|
|
643
681
|
*/
|
|
644
|
-
|
|
645
|
-
module.exports = { run };
|