const faviconPlugin = require("eleventy-plugin-gen-favicons"); const format = require("date-fns/format"); const pluginSEO = require("eleventy-plugin-seo"); const tinysvg = require("@sardine/eleventy-plugin-tinysvg"); const slinkity = require("slinkity"); // for 404 callback const fs = require("fs"); const NOT_FOUND_PATH = "_site/public/404.html"; module.exports = function (eleventyConfig) { eleventyConfig.addPassthroughCopy("./src/assets/proxy.pac"); eleventyConfig.addPassthroughCopy("public"); // plugins eleventyConfig.addPlugin(faviconPlugin, { outputDir: "./public" }); eleventyConfig.addPlugin(slinkity.plugin, slinkity.defineConfig({})); eleventyConfig.addPlugin(pluginSEO, require("./src/_data/seo.json")); eleventyConfig.addPlugin(tinysvg, { baseUrl: "src/_includes/svgs/", }); // filters eleventyConfig.addFilter("date", function (date, dateFormat) { return format(date, dateFormat); }); // 404 callback eleventyConfig.setBrowserSyncConfig({ callbacks: { ready: function (err, bs) { bs.addMiddleware("*", (req, res) => { if (!fs.existsSync(NOT_FOUND_PATH)) { throw new Error( `Expected a \`${NOT_FOUND_PATH}\` file but could not find one. Did you create a 404.html template?`, ); } const content_404 = fs.readFileSync(NOT_FOUND_PATH); // Add 404 http status code in request header. res.writeHead(404, { "Content-Type": "text/html; charset=UTF-8" }); // Provides the 404 content without redirect. res.write(content_404); res.end(); }); }, }, }); return { dir: { input: "src", output: "_site", data: "_data" }, }; };