69 lines
1.8 KiB
JavaScript
69 lines
1.8 KiB
JavaScript
const esbuild = require("esbuild");
|
|
|
|
module.exports = function (eleventyConfig) {
|
|
// Process SCSS
|
|
eleventyConfig.addPlugin(require("eleventy-sass"), {
|
|
postcss: require("postcss")([
|
|
require("postcss-preset-env"),
|
|
require("cssnano"),
|
|
]),
|
|
});
|
|
|
|
// Add noopener to links
|
|
eleventyConfig.addPlugin(require("eleventy-plugin-automatic-noopener"), {
|
|
noreferrer: true,
|
|
});
|
|
|
|
// Copy CSS assets
|
|
eleventyConfig.addPassthroughCopy("src/style/assets");
|
|
|
|
// Copy collections & links
|
|
eleventyConfig.addPassthroughCopy("src/collections/images/**/*");
|
|
eleventyConfig.addPassthroughCopy("src/images");
|
|
|
|
// start page
|
|
eleventyConfig.addPassthroughCopy("src/start/index.html");
|
|
eleventyConfig.addPassthroughCopy("src/start/style.css");
|
|
eleventyConfig.addPassthroughCopy("src/favicon.png");
|
|
|
|
// Process JS
|
|
eleventyConfig.addTemplateFormats("js");
|
|
eleventyConfig.addExtension("js", {
|
|
outputFileExtension: "js",
|
|
compile: async (content, path) => {
|
|
if (path !== "./src/js/main.js") {
|
|
return;
|
|
}
|
|
|
|
return async () => {
|
|
const output = await esbuild.build({
|
|
target: "es2020",
|
|
entryPoints: [path],
|
|
minify: true,
|
|
bundle: true,
|
|
write: false,
|
|
});
|
|
|
|
return output.outputFiles[0].text;
|
|
};
|
|
},
|
|
});
|
|
|
|
// Convert img filename to alt text
|
|
eleventyConfig.addFilter("toAlt", (text) => {
|
|
const basename = text.split(".");
|
|
return basename[0].replace(/-/g, " ");
|
|
});
|
|
|
|
// Convert diary date path to slug
|
|
eleventyConfig.addFilter("datePathSlugify", (path) => {
|
|
const folders = path.split("/");
|
|
const file = folders.pop().split(".");
|
|
return `${folders[3]}/${folders[4]}/${file[0]}`;
|
|
});
|
|
|
|
// RSS
|
|
eleventyConfig.addPlugin(require("@11ty/eleventy-plugin-rss"));
|
|
|
|
return { dir: { input: "src", output: "dist" } };
|
|
};
|