1
0
Fork 0
val.packett.cool/_config.ts

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;