Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.

Commit 82e6d68

Browse files
feat: preload aleph library files
1 parent fbd3b5f commit 82e6d68

File tree

1 file changed

+59
-37
lines changed

1 file changed

+59
-37
lines changed

html.ts

Lines changed: 59 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,86 @@
1-
import util from './util.ts'
1+
import util from "./util.ts";
22

33
export function createHtml({
4-
lang = 'en',
4+
lang = "en",
55
head = [],
66
scripts = [],
77
body,
8-
minify = false
8+
minify = false,
99
}: {
10-
lang?: string,
11-
head?: string[],
12-
scripts?: (string | { id?: string, type?: string, src?: string, innerText?: string, nomodule?: boolean, async?: boolean, preload?: boolean })[],
13-
body: string,
14-
minify?: boolean
10+
lang?: string;
11+
head?: string[];
12+
scripts?:
13+
(string | {
14+
id?: string;
15+
type?: string;
16+
src?: string;
17+
innerText?: string;
18+
nomodule?: boolean;
19+
async?: boolean;
20+
preload?: boolean;
21+
})[];
22+
body: string;
23+
minify?: boolean;
1524
}) {
16-
const eol = minify ? '' : '\n'
17-
const indent = minify ? '' : ' '.repeat(4)
18-
const headTags = head.map(tag => tag.trim())
19-
.concat(scripts.map(v => {
25+
const eol = minify ? "" : "\n";
26+
const indent = minify ? "" : " ".repeat(4);
27+
const headTags = head.map((tag) => tag.trim())
28+
.concat(scripts.map((v) => {
2029
if (!util.isString(v) && util.isNEString(v.src)) {
21-
if (v.type === 'module') {
22-
return `<link rel="modulepreload" href=${JSON.stringify(v.src)} />`
30+
if (v.type === "module") {
31+
return `<link rel="modulepreload" href=${JSON.stringify(v.src)} />`;
2332
}
24-
return `<link rel="preload" href=${JSON.stringify(v.src)} as="script" />`
33+
return `<link rel="preload" href=${JSON.stringify(v.src)
34+
} as="script" />`;
2535
}
26-
return ''
27-
})).filter(Boolean)
28-
const scriptTags = scripts.map(v => {
36+
return "";
37+
}))
38+
.concat(
39+
[
40+
"/_aleph/-/deno.land/x/aleph/error.js",
41+
"/_aleph/-/deno.land/x/aleph/aleph.js",
42+
"/_aleph/-/deno.land/x/aleph/context.js",
43+
"/_aleph/-/deno.land/x/aleph/events.js"
44+
].map((v) =>
45+
`<link rel="preload" href=${JSON.stringify(v)} as="script" />`
46+
),
47+
)
48+
.filter(Boolean);
49+
const scriptTags = scripts.map((v) => {
2950
if (util.isString(v)) {
30-
return `<script>${v}</script>`
51+
return `<script>${v}</script>`;
3152
} else if (util.isNEString(v.innerText)) {
32-
const { innerText, ...rest } = v
33-
return `<script${attrString(rest)}>${eol}${innerText}${eol}${indent}</script>`
53+
const { innerText, ...rest } = v;
54+
return `<script${attrString(rest)
55+
}>${eol}${innerText}${eol}${indent}</script>`;
3456
} else if (util.isNEString(v.src) && !v.preload) {
35-
return `<script${attrString(v)}></script>`
57+
return `<script${attrString(v)}></script>`;
3658
} else {
37-
return ''
59+
return "";
3860
}
39-
}).filter(Boolean)
61+
}).filter(Boolean);
4062

4163
return [
42-
'<!DOCTYPE html>',
64+
"<!DOCTYPE html>",
4365
`<html lang="${lang}">`,
44-
'<head>',
66+
"<head>",
4567
indent + '<meta charSet="utf-8" />',
46-
...headTags.map(tag => indent + tag),
47-
'</head>',
48-
'<body>',
68+
...headTags.map((tag) => indent + tag),
69+
"</head>",
70+
"<body>",
4971
indent + body,
50-
...scriptTags.map(tag => indent + tag),
51-
'</body>',
52-
'</html>'
53-
].join(eol)
72+
...scriptTags.map((tag) => indent + tag),
73+
"</body>",
74+
"</html>",
75+
].join(eol);
5476
}
5577

5678
function attrString(v: any): string {
57-
return Object.keys(v).map(k => {
79+
return Object.keys(v).map((k) => {
5880
if (v[k] === true) {
59-
return ` ${k}`
81+
return ` ${k}`;
6082
} else {
61-
return ` ${k}=${JSON.stringify(String(v[k]))}`
83+
return ` ${k}=${JSON.stringify(String(v[k]))}`;
6284
}
63-
}).join('')
85+
}).join("");
6486
}

0 commit comments

Comments
 (0)