elm-pages 3.0.0-beta.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +2 -2
  2. package/adapter/netlify.js +207 -0
  3. package/codegen/{elm-pages-codegen.js → elm-pages-codegen.cjs} +2731 -2939
  4. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
  5. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
  6. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
  7. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  8. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  9. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  10. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm.json +1 -1
  11. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1527 -422
  12. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +16840 -13653
  13. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  14. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
  15. package/generator/dead-code-review/elm.json +9 -7
  16. package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +59 -10
  17. package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +52 -36
  18. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
  19. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
  20. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
  21. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
  22. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  23. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  24. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  25. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -1
  26. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +1527 -422
  27. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +25118 -21832
  28. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +1 -1
  29. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +4 -4
  30. package/generator/review/elm.json +10 -10
  31. package/generator/src/RouteBuilder.elm +93 -128
  32. package/generator/src/SharedTemplate.elm +8 -7
  33. package/generator/src/SiteConfig.elm +3 -2
  34. package/generator/src/basepath-middleware.js +3 -3
  35. package/generator/src/build.js +143 -59
  36. package/generator/src/cli.js +292 -88
  37. package/generator/src/codegen.js +29 -27
  38. package/generator/src/compatibility-key.js +3 -0
  39. package/generator/src/compile-elm.js +43 -26
  40. package/generator/src/config.js +2 -4
  41. package/generator/src/copy-dir.js +2 -2
  42. package/generator/src/dev-server.js +160 -102
  43. package/generator/src/dir-helpers.js +9 -26
  44. package/generator/src/elm-codegen.js +5 -4
  45. package/generator/src/elm-file-constants.js +2 -3
  46. package/generator/src/error-formatter.js +12 -11
  47. package/generator/src/file-helpers.js +3 -4
  48. package/generator/src/generate-template-module-connector.js +23 -23
  49. package/generator/src/init.js +9 -8
  50. package/generator/src/pre-render-html.js +10 -13
  51. package/generator/src/render-test.js +109 -0
  52. package/generator/src/render-worker.js +25 -28
  53. package/generator/src/render.js +320 -143
  54. package/generator/src/request-cache.js +265 -162
  55. package/generator/src/resolve-elm-module.js +64 -0
  56. package/generator/src/rewrite-client-elm-json.js +6 -5
  57. package/generator/src/rewrite-elm-json-help.js +56 -0
  58. package/generator/src/rewrite-elm-json.js +17 -7
  59. package/generator/src/route-codegen-helpers.js +16 -31
  60. package/generator/src/seo-renderer.js +1 -3
  61. package/generator/src/vite-utils.js +1 -2
  62. package/generator/static-code/elm-pages.js +10 -0
  63. package/generator/static-code/hmr.js +79 -13
  64. package/generator/template/app/Api.elm +3 -2
  65. package/generator/template/app/Effect.elm +155 -0
  66. package/generator/template/app/ErrorPage.elm +49 -6
  67. package/generator/template/app/Route/Blog/Slug_.elm +86 -0
  68. package/generator/template/app/Route/Greet.elm +107 -0
  69. package/generator/template/app/Route/Hello.elm +119 -0
  70. package/generator/template/app/Route/Index.elm +26 -25
  71. package/generator/template/app/Shared.elm +38 -39
  72. package/generator/template/app/Site.elm +4 -7
  73. package/generator/template/app/View.elm +9 -8
  74. package/generator/template/codegen/elm.codegen.json +18 -0
  75. package/generator/template/custom-backend-task.ts +3 -0
  76. package/generator/template/elm-pages.config.mjs +13 -0
  77. package/generator/template/elm-tooling.json +0 -3
  78. package/generator/template/elm.json +25 -20
  79. package/generator/template/index.ts +1 -2
  80. package/generator/template/netlify.toml +4 -1
  81. package/generator/template/package.json +10 -4
  82. package/generator/template/script/.elm-pages/compiled-ports/custom-backend-task.mjs +7 -0
  83. package/generator/template/script/custom-backend-task.ts +3 -0
  84. package/generator/template/script/elm.json +61 -0
  85. package/generator/template/script/src/AddRoute.elm +312 -0
  86. package/generator/template/script/src/Stars.elm +42 -0
  87. package/package.json +30 -27
  88. package/src/ApiRoute.elm +249 -82
  89. package/src/BackendTask/Custom.elm +325 -0
  90. package/src/BackendTask/Env.elm +90 -0
  91. package/src/{DataSource → BackendTask}/File.elm +171 -56
  92. package/src/{DataSource → BackendTask}/Glob.elm +136 -125
  93. package/src/BackendTask/Http.elm +679 -0
  94. package/src/{DataSource → BackendTask}/Internal/Glob.elm +1 -1
  95. package/src/BackendTask/Internal/Request.elm +69 -0
  96. package/src/BackendTask/Random.elm +79 -0
  97. package/src/BackendTask/Time.elm +47 -0
  98. package/src/BackendTask.elm +531 -0
  99. package/src/FatalError.elm +90 -0
  100. package/src/FormData.elm +21 -18
  101. package/src/Head/Seo.elm +4 -4
  102. package/src/Head.elm +112 -8
  103. package/src/Internal/ApiRoute.elm +7 -5
  104. package/src/Internal/Request.elm +84 -4
  105. package/src/PageServerResponse.elm +6 -1
  106. package/src/Pages/ConcurrentSubmission.elm +127 -0
  107. package/src/Pages/Form.elm +340 -0
  108. package/src/Pages/FormData.elm +19 -0
  109. package/src/Pages/GeneratorProgramConfig.elm +15 -0
  110. package/src/Pages/Internal/FatalError.elm +5 -0
  111. package/src/Pages/Internal/Msg.elm +93 -0
  112. package/src/Pages/Internal/NotFoundReason.elm +4 -4
  113. package/src/Pages/Internal/Platform/Cli.elm +586 -768
  114. package/src/Pages/Internal/Platform/CompatibilityKey.elm +1 -1
  115. package/src/Pages/Internal/Platform/Effect.elm +1 -2
  116. package/src/Pages/Internal/Platform/GeneratorApplication.elm +379 -0
  117. package/src/Pages/Internal/Platform/StaticResponses.elm +65 -276
  118. package/src/Pages/Internal/Platform/ToJsPayload.elm +6 -9
  119. package/src/Pages/Internal/Platform.elm +330 -203
  120. package/src/Pages/Internal/ResponseSketch.elm +2 -2
  121. package/src/Pages/Internal/Script.elm +17 -0
  122. package/src/Pages/Internal/StaticHttpBody.elm +35 -1
  123. package/src/Pages/Manifest.elm +52 -11
  124. package/src/Pages/Navigation.elm +85 -0
  125. package/src/Pages/PageUrl.elm +26 -12
  126. package/src/Pages/ProgramConfig.elm +32 -22
  127. package/src/Pages/Script.elm +166 -0
  128. package/src/Pages/SiteConfig.elm +3 -2
  129. package/src/Pages/StaticHttp/Request.elm +2 -2
  130. package/src/Pages/StaticHttpRequest.elm +23 -99
  131. package/src/Pages/Url.elm +3 -3
  132. package/src/PagesMsg.elm +88 -0
  133. package/src/QueryParams.elm +21 -172
  134. package/src/RenderRequest.elm +7 -7
  135. package/src/RequestsAndPending.elm +37 -20
  136. package/src/Result/Extra.elm +26 -0
  137. package/src/Scaffold/Form.elm +569 -0
  138. package/src/Scaffold/Route.elm +1431 -0
  139. package/src/Server/Request.elm +476 -1001
  140. package/src/Server/Response.elm +130 -36
  141. package/src/Server/Session.elm +181 -111
  142. package/src/Server/SetCookie.elm +80 -32
  143. package/src/Stub.elm +53 -0
  144. package/src/Test/Html/Internal/ElmHtml/ToString.elm +8 -9
  145. package/src/{Path.elm → UrlPath.elm} +33 -36
  146. package/generator/template/public/images/icon-png.png +0 -0
  147. package/src/DataSource/Env.elm +0 -38
  148. package/src/DataSource/Http.elm +0 -446
  149. package/src/DataSource/Internal/Request.elm +0 -20
  150. package/src/DataSource/Port.elm +0 -90
  151. package/src/DataSource.elm +0 -546
  152. package/src/Form/Field.elm +0 -717
  153. package/src/Form/FieldStatus.elm +0 -36
  154. package/src/Form/FieldView.elm +0 -417
  155. package/src/Form/FormData.elm +0 -22
  156. package/src/Form/Validation.elm +0 -391
  157. package/src/Form/Value.elm +0 -118
  158. package/src/Form.elm +0 -1683
  159. package/src/FormDecoder.elm +0 -102
  160. package/src/Pages/FormState.elm +0 -256
  161. package/src/Pages/Generate.elm +0 -1242
  162. package/src/Pages/Internal/Form.elm +0 -17
  163. package/src/Pages/Internal/Platform/Cli.elm.bak +0 -1276
  164. package/src/Pages/Msg.elm +0 -79
  165. package/src/Pages/Transition.elm +0 -70
@@ -1,24 +1,25 @@
1
- const fs = require("./dir-helpers.js");
2
- const fsPromises = require("fs").promises;
3
-
4
- const { runElmReview } = require("./compile-elm.js");
5
- const { restoreColorSafe } = require("./error-formatter");
6
- const path = require("path");
7
- const spawnCallback = require("cross-spawn").spawn;
8
- const codegen = require("./codegen.js");
9
- const terser = require("terser");
10
- const os = require("os");
11
- const { Worker, SHARE_ENV } = require("worker_threads");
12
- const { ensureDirSync } = require("./file-helpers.js");
13
- const { generateClientFolder } = require("./codegen.js");
14
- const which = require("which");
15
- const { build } = require("vite");
16
- const preRenderHtml = require("./pre-render-html.js");
17
- const esbuild = require("esbuild");
18
- const { createHash } = require("crypto");
19
- const { merge_vite_configs } = require("./vite-utils.js");
20
- const { resolveConfig } = require("./config.js");
21
- const globby = require("globby");
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
- const ELM_FILE_PATH = path.join(
43
- DIR_PATH,
44
- "./elm-stuff/elm-pages",
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 DataSource.Http is called using pure NodeJS HTTP fetching
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 = require(assetManifestPath);
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: ["./port-data-source"],
161
+ entryPoints: ["./custom-backend-task"],
150
162
  platform: "node",
151
- outfile: ".elm-pages/compiled-ports/port-data-source.js",
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
- watch: false,
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 portDataSourceFileFound =
167
- globby.sync("./port-data-source.*").length > 0;
168
- if (portDataSourceFileFound) {
169
- // don't present error if there are no files matching port-data-source
170
- // if there are files matching port-data-source, warn the user in case something went wrong loading it
171
- console.error("Failed to start port-data-source watcher", error);
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 portDataSourceCompiled;
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 fs.copyFile(optimizedOutputPath, outputPath);
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
- : "Array.from(new FormData(event.target))")
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
- `lamdera`,
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: "./elm-stuff/elm-pages/elm.js",
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.error("ERROR - Adapter script failed");
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 };