joshua.seigler.net/eleventy.config.js
2024-06-07 03:07:48 -04:00

76 lines
1.9 KiB
JavaScript

const fs = require("fs");
const path = require("path");
const md = require("markdown-it");
const mdAnchor = require("markdown-it-anchor");
const mdFootnote = require("markdown-it-footnote");
const prettier = require("prettier");
module.exports = (config) => {
const slugify = config.getFilter("slugify");
const url = config.getFilter("url");
const mdLib = md({
html: true,
breaks: true,
linkify: true,
typographer: true,
})
.use(mdAnchor, {
permalink: mdAnchor.permalink.ariaHidden({
placement: "before",
symbol: "",
}),
})
.use(mdFootnote)
config.setLibrary("md", mdLib);
config.addPassthroughCopy({
"assets": "/"
});
// collection from music folder
config.addPassthroughCopy("site/music", {
rename: (filename) => {
const ext = path.extname(filename);
const base = path.basename(filename, ext);
return `${slugify(base)}${ext}`;
},
});
config.addCollection("music", () => {
const musicFiles = fs.readdirSync("./site/music/").map((filename) => {
const ext = path.extname(filename);
const base = path.basename(filename, ext);
const absUrl = `/music/${slugify(base)}${ext}`;
return {
data: {
title: base,
tags: ["music"],
},
url: url(absUrl),
};
});
return musicFiles;
});
config.addTransform("prettier", (content, outputPath) => {
if (typeof outputPath !== 'string') {
return content
}
const extname = path.extname(outputPath);
switch (extname) {
case ".html":
case ".css":
case ".json":
// Strip leading period from extension and use as the Prettier parser.
const parser = extname.replace(/^./, "");
return prettier.format(content, { parser });
default:
return content;
}
})
return {
dir: {
input: "site",
output: "dist",
},
};
};