import { inspect } from "util"; import browserslist from "browserslist"; import * as sass from "sass"; import path from "node:path"; import { bundle, browserslistToTargets, composeVisitors, transform } from "lightningcss" ; import eleventyPDF from "./_config/eleventy-plugin-pdf.js"; export default async function (eleventyConfig) { eleventyConfig.setUseGitIgnore(false); eleventyConfig.addPassthroughCopy({"./src/_includes/js/" : "/js"}); eleventyConfig.addLayoutAlias('base', 'layouts/base.html'); eleventyConfig.addLayoutAlias('pdf', 'layouts/pdf.html'); eleventyConfig.addCollection("sections", (collectionApi) => { const sections = collectionApi.getFilteredByGlob("./src/pages/sections/**") .sort((a, b) => a.data.order - b.data.order); process.env.DEBUG && console.log(inspect(sections)); return sections; }); eleventyConfig.addCollection("projects", (collectionApi) => { const projects = collectionApi.getFilteredByGlob("./src/projects/**") .sort((a, b) => a.data.order - b.data.order); process.env.DEBUG && console.log(inspect(projects)); return projects; }); eleventyConfig.addCollection('experiences', collection => { return [...collection.getFilteredByGlob('./src/experiences/*.md')] .sort((a, b) => a.data.startDate - b.data.startDate).reverse(); }); eleventyConfig.addPlugin(eleventyPDF); eleventyConfig.addPassthroughCopy('src/favicon.ico') // Recognize CSS as a "template language" eleventyConfig.addTemplateFormats("css"); // Process CSS with LightningCSS eleventyConfig.addExtension("css", { outputFileExtension: "css", compile: async function (_inputContent, inputPath) { let parsed = path.parse(inputPath); if (parsed.name.startsWith("_")) { return; } let targets = browserslistToTargets(browserslist("> 0.2% and not dead")); return async () => { // Switch to the `transform` function if you don't // plan to use `@import` to merge files let { code } = await bundle({ filename: inputPath, minify: true, sourceMap: false, targets, // Supports CSS nesting drafts: { nesting, }, }); return code; }; }, }); // Recognize Sass as a "template languages" eleventyConfig.addTemplateFormats("scss"); // Compile Sass eleventyConfig.addExtension("scss", { outputFileExtension: "css", compile: async function (inputContent, inputPath) { // Skip files like _fileName.scss let parsed = path.parse(inputPath); if (parsed.name.startsWith("_")) { return; } // Run file content through Sass let result = sass.compileString(inputContent, { loadPaths: [parsed.dir || "."], sourceMap: false, // or true, your choice! }); // Allow included files from @use or @import to // trigger rebuilds when using --incremental this.addDependencies(inputPath, result.loadedUrls); let targets = browserslistToTargets(browserslist("> 0.2% and not dead")); return async () => { let { code } = await transform({ code: Buffer.from(result.css), minify: true, sourceMap: false, targets, }); return code; }; }, }); return { markdownTemplateEngine: 'liquid', dataTemplateEngine: 'liquid', htmlTemplateEngine: 'liquid', dir: { input: 'src', output: 'dist' } }; };