elm-pages 2.1.11 → 3.0.0-beta.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 (136) hide show
  1. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmi +0 -0
  2. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Internal-RoutePattern.elmo +0 -0
  3. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmi +0 -0
  4. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolations.elmo +0 -0
  5. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmi +0 -0
  6. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmo +0 -0
  7. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
  8. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
  9. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
  10. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmo +0 -0
  11. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/d.dat +0 -0
  12. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/i.dat +0 -0
  13. package/generator/{template/public/style.css → review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock} +0 -0
  14. package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/o.dat +0 -0
  15. package/generator/review/elm-stuff/tests-0.19.1/elm.json +1 -0
  16. package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
  17. package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +27617 -0
  18. package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
  19. package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
  20. package/generator/review/elm-stuff/tests-0.19.1/js/package.json +1 -0
  21. package/generator/review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
  22. package/generator/review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
  23. package/generator/review/elm.json +13 -4
  24. package/{src → generator/review/src}/Pages/Review/NoContractViolations.elm +148 -148
  25. package/generator/review/tests/Pages/Review/NoContractViolationsTest.elm +331 -0
  26. package/generator/src/RouteBuilder.elm +420 -0
  27. package/generator/src/SharedTemplate.elm +4 -5
  28. package/generator/src/SiteConfig.elm +3 -9
  29. package/generator/src/build.js +308 -95
  30. package/generator/src/cli.js +103 -8
  31. package/generator/src/codegen.js +192 -35
  32. package/generator/src/compile-elm.js +183 -31
  33. package/generator/src/dev-server.js +353 -96
  34. package/generator/src/elm-application.json +3 -1
  35. package/generator/src/elm-codegen.js +34 -0
  36. package/generator/src/elm-file-constants.js +2 -0
  37. package/generator/src/error-formatter.js +20 -1
  38. package/generator/src/generate-template-module-connector.js +120 -924
  39. package/generator/src/hello.ts +5 -0
  40. package/generator/src/pre-render-html.js +58 -104
  41. package/generator/src/render-worker.js +27 -13
  42. package/generator/src/render.js +252 -197
  43. package/generator/src/request-cache-fs.js +18 -0
  44. package/generator/src/request-cache.js +128 -56
  45. package/generator/src/rewrite-client-elm-json.js +49 -0
  46. package/generator/src/route-codegen-helpers.js +62 -1
  47. package/generator/static-code/dev-style.css +22 -0
  48. package/generator/static-code/elm-pages.js +43 -39
  49. package/generator/static-code/hmr.js +98 -88
  50. package/generator/template/app/Api.elm +25 -0
  51. package/generator/template/app/ErrorPage.elm +38 -0
  52. package/generator/template/app/Route/Index.elm +87 -0
  53. package/generator/template/{src → app}/Shared.elm +34 -13
  54. package/generator/template/app/Site.elm +19 -0
  55. package/generator/template/{src → app}/View.elm +0 -0
  56. package/generator/template/elm-pages.config.mjs +5 -0
  57. package/generator/template/elm.json +1 -0
  58. package/generator/template/{public/index.js → index.ts} +7 -3
  59. package/generator/template/package.json +4 -4
  60. package/generator/template/public/favicon.ico +0 -0
  61. package/generator/template/public/images/icon-png.png +0 -0
  62. package/generator/template/src/.gitkeep +0 -0
  63. package/generator/template/style.css +4 -0
  64. package/package.json +30 -23
  65. package/src/ApiRoute.elm +176 -43
  66. package/src/BuildError.elm +10 -1
  67. package/src/CookieParser.elm +84 -0
  68. package/src/DataSource/Env.elm +38 -0
  69. package/src/DataSource/File.elm +27 -16
  70. package/src/DataSource/Glob.elm +126 -80
  71. package/src/DataSource/Http.elm +283 -304
  72. package/src/DataSource/Internal/Glob.elm +5 -21
  73. package/src/DataSource/Internal/Request.elm +25 -0
  74. package/src/DataSource/Port.elm +17 -14
  75. package/src/DataSource.elm +55 -318
  76. package/src/Form/Field.elm +717 -0
  77. package/src/Form/FieldStatus.elm +36 -0
  78. package/src/Form/FieldView.elm +417 -0
  79. package/src/Form/FormData.elm +22 -0
  80. package/src/Form/Validation.elm +391 -0
  81. package/src/Form/Value.elm +118 -0
  82. package/src/Form.elm +1683 -0
  83. package/src/FormData.elm +58 -0
  84. package/src/FormDecoder.elm +102 -0
  85. package/src/Head/Seo.elm +12 -4
  86. package/src/Head.elm +12 -2
  87. package/src/HtmlPrinter.elm +1 -1
  88. package/src/Internal/ApiRoute.elm +17 -4
  89. package/src/Internal/Request.elm +7 -0
  90. package/src/PageServerResponse.elm +68 -0
  91. package/src/Pages/ContentCache.elm +1 -229
  92. package/src/Pages/Fetcher.elm +58 -0
  93. package/src/Pages/FormState.elm +256 -0
  94. package/src/Pages/Generate.elm +800 -0
  95. package/src/Pages/Internal/Form.elm +17 -0
  96. package/src/Pages/Internal/NotFoundReason.elm +3 -55
  97. package/src/Pages/Internal/Platform/Cli.elm +777 -579
  98. package/src/Pages/Internal/Platform/Effect.elm +5 -5
  99. package/src/Pages/Internal/Platform/StaticResponses.elm +178 -394
  100. package/src/Pages/Internal/Platform/ToJsPayload.elm +24 -23
  101. package/src/Pages/Internal/Platform.elm +1244 -504
  102. package/src/Pages/Internal/ResponseSketch.elm +19 -0
  103. package/src/Pages/Internal/RoutePattern.elm +596 -45
  104. package/src/Pages/Manifest.elm +26 -0
  105. package/src/Pages/Msg.elm +79 -0
  106. package/src/Pages/ProgramConfig.elm +67 -14
  107. package/src/Pages/SiteConfig.elm +3 -6
  108. package/src/Pages/StaticHttp/Request.elm +4 -2
  109. package/src/Pages/StaticHttpRequest.elm +50 -215
  110. package/src/Pages/Transition.elm +70 -0
  111. package/src/Path.elm +1 -0
  112. package/src/Pattern.elm +98 -0
  113. package/src/RenderRequest.elm +2 -2
  114. package/src/RequestsAndPending.elm +111 -9
  115. package/src/Server/Request.elm +1253 -0
  116. package/src/Server/Response.elm +292 -0
  117. package/src/Server/Session.elm +316 -0
  118. package/src/Server/SetCookie.elm +169 -0
  119. package/src/TerminalText.elm +1 -1
  120. package/src/Test/Html/Internal/ElmHtml/Markdown.elm +0 -1
  121. package/src/Test/Html/Internal/ElmHtml/ToString.elm +1 -1
  122. package/generator/src/Page.elm +0 -359
  123. package/generator/src/codegen-template-module.js +0 -183
  124. package/generator/src/elm-pages-js-minified.js +0 -1
  125. package/generator/template/src/Api.elm +0 -14
  126. package/generator/template/src/Page/Index.elm +0 -69
  127. package/generator/template/src/Site.elm +0 -41
  128. package/src/DataSource/ServerRequest.elm +0 -60
  129. package/src/Internal/OptimizedDecoder.elm +0 -18
  130. package/src/KeepOrDiscard.elm +0 -6
  131. package/src/OptimizedDecoder/Pipeline.elm +0 -335
  132. package/src/OptimizedDecoder.elm +0 -818
  133. package/src/Pages/Internal/ApplicationType.elm +0 -6
  134. package/src/Pages/Secrets.elm +0 -83
  135. package/src/Secrets.elm +0 -111
  136. 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 */