elm-pages 2.1.11 → 3.0.0-beta.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.
Files changed (161) hide show
  1. package/codegen/elm-pages-codegen.js +38507 -0
  2. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmi +0 -0
  3. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateData.elmo +0 -0
  4. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmi +0 -0
  5. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-DeadCodeEliminateDataTest.elmo +0 -0
  6. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
  7. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
  8. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
  9. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmo +0 -0
  10. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  11. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  12. package/generator/{template/public/style.css → dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock} +0 -0
  13. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  14. package/generator/dead-code-review/elm-stuff/tests-0.19.1/elm.json +1 -0
  15. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
  16. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/Runner.elm.js +25651 -0
  17. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
  18. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
  19. package/generator/dead-code-review/elm-stuff/tests-0.19.1/js/package.json +1 -0
  20. package/generator/dead-code-review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
  21. package/generator/dead-code-review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
  22. package/generator/dead-code-review/elm.json +35 -0
  23. package/generator/dead-code-review/src/Pages/Review/DeadCodeEliminateData.elm +181 -0
  24. package/generator/dead-code-review/src/ReviewConfig.elm +9 -0
  25. package/generator/dead-code-review/tests/Pages/Review/DeadCodeEliminateDataTest.elm +455 -0
  26. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
  27. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
  28. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
  29. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
  30. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmi +0 -0
  31. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmo +0 -0
  32. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
  33. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
  34. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
  35. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmo +0 -0
  36. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  37. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  38. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock +0 -0
  39. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  40. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -0
  41. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
  42. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +27617 -0
  43. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
  44. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
  45. package/generator/review/elm-stuff/tests-0.19.1/js/package.json +1 -0
  46. package/generator/review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
  47. package/generator/review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
  48. package/generator/review/elm.json +13 -4
  49. package/{src → generator/review/src}/Pages/Review/NoContractViolations.elm +148 -148
  50. package/generator/review/tests/Pages/Review/NoContractViolationsTest.elm +331 -0
  51. package/generator/src/RouteBuilder.elm +420 -0
  52. package/generator/src/SharedTemplate.elm +4 -5
  53. package/generator/src/SiteConfig.elm +3 -9
  54. package/generator/src/build.js +308 -95
  55. package/generator/src/cli.js +103 -8
  56. package/generator/src/codegen.js +192 -35
  57. package/generator/src/compile-elm.js +183 -31
  58. package/generator/src/dev-server.js +353 -96
  59. package/generator/src/elm-application.json +3 -1
  60. package/generator/src/elm-codegen.js +34 -0
  61. package/generator/src/elm-file-constants.js +2 -0
  62. package/generator/src/error-formatter.js +20 -1
  63. package/generator/src/generate-template-module-connector.js +125 -927
  64. package/generator/src/hello.ts +5 -0
  65. package/generator/src/pre-render-html.js +58 -104
  66. package/generator/src/render-worker.js +27 -13
  67. package/generator/src/render.js +252 -197
  68. package/generator/src/request-cache-fs.js +18 -0
  69. package/generator/src/request-cache.js +128 -56
  70. package/generator/src/rewrite-client-elm-json.js +49 -0
  71. package/generator/src/route-codegen-helpers.js +62 -1
  72. package/generator/static-code/dev-style.css +22 -0
  73. package/generator/static-code/elm-pages.js +43 -39
  74. package/generator/static-code/hmr.js +98 -88
  75. package/generator/template/app/Api.elm +25 -0
  76. package/generator/template/app/ErrorPage.elm +38 -0
  77. package/generator/template/app/Route/Index.elm +87 -0
  78. package/generator/template/{src → app}/Shared.elm +34 -13
  79. package/generator/template/app/Site.elm +19 -0
  80. package/generator/template/{src → app}/View.elm +0 -0
  81. package/generator/template/elm-pages.config.mjs +5 -0
  82. package/generator/template/elm.json +1 -0
  83. package/generator/template/{public/index.js → index.ts} +7 -3
  84. package/generator/template/package.json +4 -4
  85. package/generator/template/public/favicon.ico +0 -0
  86. package/generator/template/public/images/icon-png.png +0 -0
  87. package/generator/template/src/.gitkeep +0 -0
  88. package/generator/template/style.css +4 -0
  89. package/package.json +33 -23
  90. package/src/ApiRoute.elm +176 -43
  91. package/src/BuildError.elm +10 -1
  92. package/src/CookieParser.elm +84 -0
  93. package/src/DataSource/Env.elm +38 -0
  94. package/src/DataSource/File.elm +27 -16
  95. package/src/DataSource/Glob.elm +126 -80
  96. package/src/DataSource/Http.elm +283 -304
  97. package/src/DataSource/Internal/Glob.elm +5 -21
  98. package/src/DataSource/Internal/Request.elm +25 -0
  99. package/src/DataSource/Port.elm +17 -14
  100. package/src/DataSource.elm +55 -318
  101. package/src/Form/Field.elm +717 -0
  102. package/src/Form/FieldStatus.elm +36 -0
  103. package/src/Form/FieldView.elm +417 -0
  104. package/src/Form/FormData.elm +22 -0
  105. package/src/Form/Validation.elm +391 -0
  106. package/src/Form/Value.elm +118 -0
  107. package/src/Form.elm +1683 -0
  108. package/src/FormData.elm +58 -0
  109. package/src/FormDecoder.elm +102 -0
  110. package/src/Head/Seo.elm +12 -4
  111. package/src/Head.elm +12 -2
  112. package/src/HtmlPrinter.elm +1 -1
  113. package/src/Internal/ApiRoute.elm +17 -4
  114. package/src/Internal/Request.elm +7 -0
  115. package/src/PageServerResponse.elm +68 -0
  116. package/src/Pages/ContentCache.elm +1 -229
  117. package/src/Pages/Fetcher.elm +58 -0
  118. package/src/Pages/FormState.elm +256 -0
  119. package/src/Pages/Generate.elm +800 -0
  120. package/src/Pages/Internal/Form.elm +17 -0
  121. package/src/Pages/Internal/NotFoundReason.elm +3 -55
  122. package/src/Pages/Internal/Platform/Cli.elm +777 -579
  123. package/src/Pages/Internal/Platform/Effect.elm +5 -5
  124. package/src/Pages/Internal/Platform/StaticResponses.elm +178 -394
  125. package/src/Pages/Internal/Platform/ToJsPayload.elm +24 -23
  126. package/src/Pages/Internal/Platform.elm +1244 -504
  127. package/src/Pages/Internal/ResponseSketch.elm +19 -0
  128. package/src/Pages/Internal/RoutePattern.elm +596 -45
  129. package/src/Pages/Manifest.elm +26 -0
  130. package/src/Pages/Msg.elm +79 -0
  131. package/src/Pages/ProgramConfig.elm +67 -14
  132. package/src/Pages/SiteConfig.elm +3 -6
  133. package/src/Pages/StaticHttp/Request.elm +4 -2
  134. package/src/Pages/StaticHttpRequest.elm +50 -215
  135. package/src/Pages/Transition.elm +70 -0
  136. package/src/Path.elm +1 -0
  137. package/src/Pattern.elm +98 -0
  138. package/src/RenderRequest.elm +2 -2
  139. package/src/RequestsAndPending.elm +111 -9
  140. package/src/Server/Request.elm +1253 -0
  141. package/src/Server/Response.elm +292 -0
  142. package/src/Server/Session.elm +316 -0
  143. package/src/Server/SetCookie.elm +169 -0
  144. package/src/TerminalText.elm +1 -1
  145. package/src/Test/Html/Internal/ElmHtml/Markdown.elm +0 -1
  146. package/src/Test/Html/Internal/ElmHtml/ToString.elm +1 -1
  147. package/generator/src/Page.elm +0 -359
  148. package/generator/src/codegen-template-module.js +0 -183
  149. package/generator/src/elm-pages-js-minified.js +0 -1
  150. package/generator/template/src/Api.elm +0 -14
  151. package/generator/template/src/Page/Index.elm +0 -69
  152. package/generator/template/src/Site.elm +0 -41
  153. package/src/DataSource/ServerRequest.elm +0 -60
  154. package/src/Internal/OptimizedDecoder.elm +0 -18
  155. package/src/KeepOrDiscard.elm +0 -6
  156. package/src/OptimizedDecoder/Pipeline.elm +0 -335
  157. package/src/OptimizedDecoder.elm +0 -818
  158. package/src/Pages/Internal/ApplicationType.elm +0 -6
  159. package/src/Pages/Secrets.elm +0 -83
  160. package/src/Secrets.elm +0 -111
  161. package/src/SecretsDict.elm +0 -45
@@ -0,0 +1,5 @@
1
+ export function hello(): string {
2
+ console.log("HELLLO!!!!");
3
+
4
+ return "Hello World!";
5
+ }
@@ -1,116 +1,70 @@
1
- const cliVersion = require("../../package.json").version;
2
1
  const seo = require("./seo-renderer.js");
3
- const elmPagesJsMinified = require("./elm-pages-js-minified.js");
4
- const path = require("path").posix;
5
- const jsesc = require("jsesc");
2
+ const cliVersion = require("../../package.json").version;
3
+ const path = require("path");
6
4
 
7
- /** @typedef { { head: any[]; errors: any[]; contentJson: any[]; html: string; route: string; title: string; } } Arg */
5
+ /** @typedef { { head: any[]; errors: any[]; html: string; route: string; title: string; } } Arg */
8
6
  /** @typedef { { tag : 'PageProgress'; args : Arg[] } } PageProgress */
9
7
 
10
- module.exports =
11
- /**
12
- * @param {string} basePath
13
- * @param {Arg} fromElm
14
- * @param {unknown} contentJson
15
- * @param {boolean} devServer
16
- * @returns {string}
17
- */
18
- function wrapHtml(basePath, fromElm, contentJson, devServer) {
19
- const devServerOnly = (/** @type {string} */ devServerOnlyString) =>
20
- devServer ? devServerOnlyString : "";
21
- const seoData = seo.gather(fromElm.head);
22
- /*html*/
23
- return `<!DOCTYPE html>
24
- ${seoData.rootElement}
25
- <head>
26
- <link rel="stylesheet" href="${path.join(basePath, "style.css")}">
27
- ${devServerOnly(devServerStyleTag())}
28
- <link rel="preload" href="${path.join(basePath, "elm.js")}" as="script">
29
- <link rel="modulepreload" href="${path.join(basePath, "index.js")}">
30
- ${devServerOnly(
31
- /* html */ `<script defer="defer" src="${path.join(
32
- basePath,
33
- "hmr.js"
34
- )}" type="text/javascript"></script>`
35
- )}
36
- <script defer="defer" src="${path.join(
37
- basePath,
38
- "elm.js"
39
- )}" type="text/javascript"></script>
40
- <meta charset="UTF-8">
41
- <meta name="viewport" content="width=device-width,initial-scale=1">
42
- <script type="module">
43
- import userInit from"${path.join(basePath, "index.js")}";
44
- ${elmPagesJsMinified}
45
- </script>
46
- <title>${fromElm.title}</title>
47
- <meta name="generator" content="elm-pages v${cliVersion}">
48
- <link rel="manifest" href="${path.join(basePath, "manifest.json")}">
49
- <meta name="mobile-web-app-capable" content="yes">
50
- <meta name="theme-color" content="#ffffff">
51
- <meta name="apple-mobile-web-app-capable" content="yes">
52
- <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
53
- ${seoData.headTags}
54
- <script id="__ELM_PAGES_DATA__" type="application/json">${jsesc(
55
- contentJson,
56
- {
57
- isScriptContext: true,
58
- json: true,
59
- }
60
- )}</script>
61
- </head>
62
- <body>
63
- <div data-url="" display="none"></div>
64
- ${fromElm.html}
65
- </body>
66
- </html>
67
- `;
8
+ function wrapHtml(basePath, fromElm, contentDatPayload) {
9
+ const seoData = seo.gather(fromElm.head);
10
+ return {
11
+ kind: "html-template",
12
+ title: fromElm.title,
13
+ html: fromElm.html,
14
+ bytesData: Buffer.from(contentDatPayload.buffer).toString("base64"),
15
+ headTags: seoData.headTags,
16
+ rootElement: seoData.rootElement,
68
17
  };
18
+ }
69
19
 
70
- /**
71
- * @param {string} route
72
- */
73
- function cleanRoute(route) {
74
- return route.replace(/(^\/|\/$)/, "");
20
+ function templateHtml() {
21
+ return /* html */ `<!DOCTYPE html>
22
+ <!-- ROOT --><html lang="en">
23
+ <head>
24
+ <!-- PLACEHOLDER_PRELOADS -->
25
+ <script defer src="/elm.js" type="text/javascript"></script>
26
+ <script defer src="${path.join(
27
+ __dirname,
28
+ "../static-code/elm-pages.js"
29
+ )}" type="module"></script>
30
+ <link rel="stylesheet" href="/style.css" />
31
+ <meta charset="UTF-8" />
32
+ <meta name="viewport" content="width=device-width,initial-scale=1" />
33
+ <title><!-- PLACEHOLDER_TITLE --></title>
34
+ <meta name="generator" content="elm-pages v${cliVersion}" />
35
+ <meta name="mobile-web-app-capable" content="yes" />
36
+ <meta name="theme-color" content="#ffffff" />
37
+ <meta name="apple-mobile-web-app-capable" content="yes" />
38
+ <meta
39
+ name="apple-mobile-web-app-status-bar-style"
40
+ content="black-translucent"
41
+ />
42
+ <!-- PLACEHOLDER_HEAD_AND_DATA -->
43
+ </head>
44
+ <body>
45
+ <div data-url="" display="none"></div>
46
+ <!-- PLACEHOLDER_HTML -->
47
+ </body>
48
+ </html>`;
75
49
  }
76
50
 
77
51
  /**
78
- * @param {string} cleanedRoute
52
+ * @param {string} processedTemplate
79
53
  */
80
- function pathToRoot(cleanedRoute) {
81
- return cleanedRoute === ""
82
- ? cleanedRoute
83
- : cleanedRoute
84
- .split("/")
85
- .map((_) => "..")
86
- .join("/")
87
- .replace(/\.$/, "./");
54
+ function replaceTemplate(processedTemplate, info) {
55
+ return processedTemplate
56
+ .replace(
57
+ /<!--\s*PLACEHOLDER_HEAD_AND_DATA\s*-->/,
58
+ `${info.headTags}
59
+ <script id="__ELM_PAGES_BYTES_DATA__" type="application/octet-stream">${info.bytesData}</script>`
60
+ )
61
+ .replace(/<!--\s*PLACEHOLDER_TITLE\s*-->/, info.title)
62
+ .replace(/<!--\s*PLACEHOLDER_HTML\s* -->/, info.html)
63
+ .replace(/<!-- ROOT -->\S*<html lang="en">/m, info.rootElement);
88
64
  }
89
65
 
90
- function devServerStyleTag() {
91
- /*html*/
92
- return `<style>
93
- @keyframes lds-default {
94
- 0%, 20%, 80%, 100% {
95
- transform: scale(1);
96
- }
97
- 50% {
98
- transform: scale(1.5);
99
- }
100
- }
101
-
102
- #not-found-reason code {
103
- color: rgb(226, 0, 124);
104
- }
105
-
106
- #not-found-reason h1 {
107
- font-size: 26px;
108
- font-weight: bold;
109
- padding-bottom: 15px;
110
- }
111
-
112
- #not-found-reason a:hover {
113
- text-decoration: underline;
114
- }
115
- </style>`;
116
- }
66
+ module.exports = {
67
+ wrapHtml,
68
+ templateHtml,
69
+ replaceTemplate,
70
+ };
@@ -7,21 +7,22 @@ let Elm;
7
7
 
8
8
  global.staticHttpCache = {};
9
9
 
10
- async function run({ mode, pathname }) {
10
+ async function run({ mode, pathname, serverRequest, portsFilePath }) {
11
11
  console.time(`${threadId} ${pathname}`);
12
12
  try {
13
- const req = null;
14
13
  const renderResult = await renderer(
14
+ portsFilePath,
15
15
  workerData.basePath,
16
16
  requireElm(mode),
17
17
  mode,
18
18
  pathname,
19
- req,
19
+ serverRequest,
20
20
  function (patterns) {
21
21
  if (mode === "dev-server" && patterns.size > 0) {
22
22
  parentPort.postMessage({ tag: "watch", data: [...patterns] });
23
23
  }
24
- }
24
+ },
25
+ true
25
26
  );
26
27
 
27
28
  if (mode === "dev-server") {
@@ -66,21 +67,21 @@ async function outputString(
66
67
  const args = fromElm;
67
68
  const normalizedRoute = args.route.replace(/index$/, "");
68
69
  await fs.tryMkdir(`./dist/${normalizedRoute}`);
69
- const contentJsonString = JSON.stringify({
70
- is404: args.is404,
71
- staticData: args.contentJson,
72
- path: args.route,
73
- });
74
- fs.writeFileSync(`dist/${normalizedRoute}/index.html`, args.htmlString);
70
+ const template = await fs.readFileSync("./dist/template.html", "utf8");
75
71
  fs.writeFileSync(
76
- `dist/${normalizedRoute}/content.json`,
77
- contentJsonString
72
+ `dist/${normalizedRoute}/index.html`,
73
+ renderTemplate(template, fromElm)
78
74
  );
75
+ args.contentDatPayload &&
76
+ fs.writeFileSync(
77
+ `dist/${normalizedRoute}/content.dat`,
78
+ Buffer.from(args.contentDatPayload.buffer)
79
+ );
79
80
  parentPort.postMessage({ tag: "done" });
80
81
  break;
81
82
  }
82
83
  case "api-response": {
83
- const body = fromElm.body;
84
+ const body = fromElm.body.body;
84
85
  console.log(`Generated ${pathname}`);
85
86
  fs.writeFileSyncSafe(path.join("dist", pathname), body);
86
87
  if (pathname === "/all-paths.json") {
@@ -94,6 +95,19 @@ async function outputString(
94
95
  }
95
96
  }
96
97
 
98
+ function renderTemplate(template, renderResult) {
99
+ const info = renderResult.htmlString;
100
+ return template
101
+ .replace(
102
+ /<!--\s*PLACEHOLDER_HEAD_AND_DATA\s*-->/,
103
+ `${info.headTags}
104
+ <script id="__ELM_PAGES_BYTES_DATA__" type="application/octet-stream">${info.bytesData}</script>`
105
+ )
106
+ .replace(/<!--\s*PLACEHOLDER_TITLE\s*-->/, info.title)
107
+ .replace(/<!--\s*PLACEHOLDER_HTML\s* -->/, info.html)
108
+ .replace(/<!-- ROOT -->\S*<html lang="en">/m, info.rootElement);
109
+ }
110
+
97
111
  parentPort.on("message", run);
98
112
 
99
113
  /** @typedef { { tag : 'PageProgress'; args : Arg[] } } PageProgress */