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.
- 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/Pages-Review-NoContractViolationsTest.elmi +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Pages-Review-NoContractViolationsTest.elmo +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmi +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Reporter.elmo +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.elmi +0 -0
- package/generator/review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/Runner.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/{template/public/style.css → review/elm-stuff/tests-0.19.1/elm-stuff/0.19.1/lock} +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 -0
- package/generator/review/elm-stuff/tests-0.19.1/js/Reporter.elm.js +6795 -0
- package/generator/review/elm-stuff/tests-0.19.1/js/Runner.elm.js +27617 -0
- package/generator/review/elm-stuff/tests-0.19.1/js/node_runner.js +110 -0
- package/generator/review/elm-stuff/tests-0.19.1/js/node_supervisor.js +187 -0
- package/generator/review/elm-stuff/tests-0.19.1/js/package.json +1 -0
- package/generator/review/elm-stuff/tests-0.19.1/src/Reporter.elm +26 -0
- package/generator/review/elm-stuff/tests-0.19.1/src/Runner.elm +62 -0
- package/generator/review/elm.json +13 -4
- package/{src → generator/review/src}/Pages/Review/NoContractViolations.elm +148 -148
- package/generator/review/tests/Pages/Review/NoContractViolationsTest.elm +331 -0
- package/generator/src/RouteBuilder.elm +420 -0
- package/generator/src/SharedTemplate.elm +4 -5
- package/generator/src/SiteConfig.elm +3 -9
- package/generator/src/build.js +308 -95
- package/generator/src/cli.js +103 -8
- package/generator/src/codegen.js +192 -35
- package/generator/src/compile-elm.js +183 -31
- package/generator/src/dev-server.js +353 -96
- package/generator/src/elm-application.json +3 -1
- package/generator/src/elm-codegen.js +34 -0
- package/generator/src/elm-file-constants.js +2 -0
- package/generator/src/error-formatter.js +20 -1
- package/generator/src/generate-template-module-connector.js +120 -924
- package/generator/src/hello.ts +5 -0
- package/generator/src/pre-render-html.js +58 -104
- package/generator/src/render-worker.js +27 -13
- package/generator/src/render.js +252 -197
- package/generator/src/request-cache-fs.js +18 -0
- package/generator/src/request-cache.js +128 -56
- package/generator/src/rewrite-client-elm-json.js +49 -0
- package/generator/src/route-codegen-helpers.js +62 -1
- package/generator/static-code/dev-style.css +22 -0
- package/generator/static-code/elm-pages.js +43 -39
- package/generator/static-code/hmr.js +98 -88
- package/generator/template/app/Api.elm +25 -0
- package/generator/template/app/ErrorPage.elm +38 -0
- package/generator/template/app/Route/Index.elm +87 -0
- package/generator/template/{src → app}/Shared.elm +34 -13
- package/generator/template/app/Site.elm +19 -0
- package/generator/template/{src → app}/View.elm +0 -0
- package/generator/template/elm-pages.config.mjs +5 -0
- package/generator/template/elm.json +1 -0
- package/generator/template/{public/index.js → index.ts} +7 -3
- package/generator/template/package.json +4 -4
- package/generator/template/public/favicon.ico +0 -0
- package/generator/template/public/images/icon-png.png +0 -0
- package/generator/template/src/.gitkeep +0 -0
- package/generator/template/style.css +4 -0
- package/package.json +30 -23
- package/src/ApiRoute.elm +176 -43
- package/src/BuildError.elm +10 -1
- package/src/CookieParser.elm +84 -0
- package/src/DataSource/Env.elm +38 -0
- package/src/DataSource/File.elm +27 -16
- package/src/DataSource/Glob.elm +126 -80
- package/src/DataSource/Http.elm +283 -304
- package/src/DataSource/Internal/Glob.elm +5 -21
- package/src/DataSource/Internal/Request.elm +25 -0
- package/src/DataSource/Port.elm +17 -14
- package/src/DataSource.elm +55 -318
- package/src/Form/Field.elm +717 -0
- package/src/Form/FieldStatus.elm +36 -0
- package/src/Form/FieldView.elm +417 -0
- package/src/Form/FormData.elm +22 -0
- package/src/Form/Validation.elm +391 -0
- package/src/Form/Value.elm +118 -0
- package/src/Form.elm +1683 -0
- package/src/FormData.elm +58 -0
- package/src/FormDecoder.elm +102 -0
- package/src/Head/Seo.elm +12 -4
- package/src/Head.elm +12 -2
- package/src/HtmlPrinter.elm +1 -1
- package/src/Internal/ApiRoute.elm +17 -4
- package/src/Internal/Request.elm +7 -0
- package/src/PageServerResponse.elm +68 -0
- package/src/Pages/ContentCache.elm +1 -229
- package/src/Pages/Fetcher.elm +58 -0
- package/src/Pages/FormState.elm +256 -0
- package/src/Pages/Generate.elm +800 -0
- package/src/Pages/Internal/Form.elm +17 -0
- package/src/Pages/Internal/NotFoundReason.elm +3 -55
- package/src/Pages/Internal/Platform/Cli.elm +777 -579
- package/src/Pages/Internal/Platform/Effect.elm +5 -5
- package/src/Pages/Internal/Platform/StaticResponses.elm +178 -394
- package/src/Pages/Internal/Platform/ToJsPayload.elm +24 -23
- package/src/Pages/Internal/Platform.elm +1244 -504
- package/src/Pages/Internal/ResponseSketch.elm +19 -0
- package/src/Pages/Internal/RoutePattern.elm +596 -45
- package/src/Pages/Manifest.elm +26 -0
- package/src/Pages/Msg.elm +79 -0
- package/src/Pages/ProgramConfig.elm +67 -14
- package/src/Pages/SiteConfig.elm +3 -6
- package/src/Pages/StaticHttp/Request.elm +4 -2
- package/src/Pages/StaticHttpRequest.elm +50 -215
- package/src/Pages/Transition.elm +70 -0
- package/src/Path.elm +1 -0
- package/src/Pattern.elm +98 -0
- package/src/RenderRequest.elm +2 -2
- package/src/RequestsAndPending.elm +111 -9
- package/src/Server/Request.elm +1253 -0
- package/src/Server/Response.elm +292 -0
- package/src/Server/Session.elm +316 -0
- package/src/Server/SetCookie.elm +169 -0
- package/src/TerminalText.elm +1 -1
- package/src/Test/Html/Internal/ElmHtml/Markdown.elm +0 -1
- package/src/Test/Html/Internal/ElmHtml/ToString.elm +1 -1
- package/generator/src/Page.elm +0 -359
- package/generator/src/codegen-template-module.js +0 -183
- package/generator/src/elm-pages-js-minified.js +0 -1
- package/generator/template/src/Api.elm +0 -14
- package/generator/template/src/Page/Index.elm +0 -69
- package/generator/template/src/Site.elm +0 -41
- package/src/DataSource/ServerRequest.elm +0 -60
- package/src/Internal/OptimizedDecoder.elm +0 -18
- package/src/KeepOrDiscard.elm +0 -6
- package/src/OptimizedDecoder/Pipeline.elm +0 -335
- package/src/OptimizedDecoder.elm +0 -818
- package/src/Pages/Internal/ApplicationType.elm +0 -6
- package/src/Pages/Secrets.elm +0 -83
- package/src/Secrets.elm +0 -111
- package/src/SecretsDict.elm +0 -45
|
@@ -1,116 +1,70 @@
|
|
|
1
|
-
const cliVersion = require("../../package.json").version;
|
|
2
1
|
const seo = require("./seo-renderer.js");
|
|
3
|
-
const
|
|
4
|
-
const path = require("path")
|
|
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[];
|
|
5
|
+
/** @typedef { { head: any[]; errors: any[]; html: string; route: string; title: string; } } Arg */
|
|
8
6
|
/** @typedef { { tag : 'PageProgress'; args : Arg[] } } PageProgress */
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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}
|
|
52
|
+
* @param {string} processedTemplate
|
|
79
53
|
*/
|
|
80
|
-
function
|
|
81
|
-
return
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
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
|
|
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}/
|
|
77
|
-
|
|
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 */
|