import { DateTime } from "luxon"; import fs from "fs"; import pluginNavigation from "@11ty/eleventy-navigation"; import pluginRss from "@11ty/eleventy-plugin-rss"; import pluginSyntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight"; import pluginAncestry from "@tigersway/eleventy-plugin-ancestry"; import metagen from "eleventy-plugin-metagen"; import pluginTOC from "eleventy-plugin-nesting-toc"; import markdownIt from "markdown-it"; import markdownItAnchor from "markdown-it-anchor"; import markdownItPlantUML from "markdown-it-plantuml"; export default function (eleventyConfig) { eleventyConfig.addPlugin(pluginNavigation); eleventyConfig.addPlugin(pluginRss); eleventyConfig.addPlugin(pluginSyntaxHighlight); eleventyConfig.addPlugin(pluginAncestry); eleventyConfig.addPlugin(metagen); eleventyConfig.addPlugin(pluginTOC, { tags: ["h1", "h2", "h3"], }); eleventyConfig.setDataDeepMerge(true); eleventyConfig.addLayoutAlias("post", "layouts/post.njk"); eleventyConfig.addFilter("readableDate", (dateObj) => { return DateTime.fromJSDate(dateObj, { zone: "utc" }).toFormat( "dd LLL yyyy", ); }); // https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#valid-date-string eleventyConfig.addFilter("htmlDateString", (dateObj) => { return DateTime.fromJSDate(dateObj, { zone: "utc" }).toFormat( "yyyy-LL-dd", ); }); // Remove trailing # in automatic generated toc, because of // anchors added at the end of the titles. eleventyConfig.addFilter("stripHash", (toc) => { return toc.replace(/ #\<\/a\>/g, ""); }); // Get the first `n` elements of a collection. eleventyConfig.addFilter("head", (array, n) => { if (n < 0) { return array.slice(n); } return array.slice(0, n); }); // Get the lowest in a list of numbers. eleventyConfig.addFilter("min", (...numbers) => { return Math.min.apply(null, numbers); }); eleventyConfig.addPassthroughCopy("img"); eleventyConfig.addPassthroughCopy("css"); eleventyConfig.addPassthroughCopy("js"); // Redirects (for Cloudflare) eleventyConfig.addPassthroughCopy({ _redirects: "_redirects" }); /* Markdown Overrides */ let markdownLibrary = markdownIt({ html: true, breaks: false, linkify: true, }) .use(markdownItAnchor, { permalink: true, permalinkClass: "direct-link", permalinkSymbol: "#", }) .use(markdownItPlantUML, {}); eleventyConfig.setLibrary("md", markdownLibrary); // Browsersync Overrides eleventyConfig.setBrowserSyncConfig({ callbacks: { ready: function (err, browserSync) { const content_404 = fs.readFileSync("_dist/404.html"); browserSync.addMiddleware("*", (req, res) => { // Provides the 404 content without redirect. res.write(content_404); res.end(); }); }, }, ui: false, ghostMode: false, }); return { templateFormats: ["md", "njk", "html", "liquid", "11ty.js"], // If your site lives in a different subdirectory, change this. // Leading or trailing slashes are all normalized away, so don't worry about those. // If you don't have a subdirectory, use "" or "/" (they do the same thing) // This is only used for link URLs (it does not affect your file structure) // Best paired with the `url` filter: https://www.11ty.dev/docs/filters/url/ // You can also pass this in on the command line using `--pathprefix` // pathPrefix: "/", markdownTemplateEngine: "liquid", htmlTemplateEngine: "njk", dataTemplateEngine: "njk", // These are all optional, defaults are shown: dir: { input: ".", includes: "_includes", data: "_data", output: "_dist", }, }; }