50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import lume from "lume/mod.ts";
|
|
import date from "lume/plugins/date.ts";
|
|
import read_info from "lume/plugins/reading_info.ts";
|
|
import code_highlight from "lume/plugins/code_highlight.ts";
|
|
import { createSlugifier } from "lume/plugins/slugify_urls.ts";
|
|
import { encode } from "std/encoding/base64.ts";
|
|
import { basename } from "std/path/mod.ts";
|
|
import { default as anchor } from "npm:markdown-it-anchor@8.6.5";
|
|
import { default as ins } from "npm:markdown-it-ins@3.0.1";
|
|
|
|
const site = lume({}, {
|
|
markdown: {
|
|
options: {
|
|
typographer: true,
|
|
},
|
|
keepDefaultPlugins: true,
|
|
plugins: [[anchor, {
|
|
permalink: anchor.permalink.headerLink({ safariReaderFix: true }),
|
|
slugify: createSlugifier(),
|
|
}], ins],
|
|
},
|
|
});
|
|
|
|
site.helper(
|
|
"asset",
|
|
async (name) =>
|
|
`/x/${name}?v=${
|
|
encode(
|
|
(await crypto.subtle.digest(
|
|
"SHA-256",
|
|
await Deno.readFile(site.root(`x/${name}`)),
|
|
)).slice(0, 8),
|
|
)
|
|
}`,
|
|
{ type: "tag", async: true },
|
|
);
|
|
|
|
site.filter("take", (x, n) => x.slice(0, n));
|
|
site.filter("drop", (x, n) => x.slice(n, x.length));
|
|
site.filter("basename", basename);
|
|
|
|
site
|
|
.copy("x")
|
|
.copy([".jpg", ".png", ".webp", ".webm", ".avif", ".jxl", ".svg", ".pdf", ".json"])
|
|
.use(date())
|
|
.use(read_info())
|
|
.use(code_highlight());
|
|
|
|
export default site;
|