Drastically simplify the drafts workflow

This commit is contained in:
Zach Leatherman 2024-09-24 12:18:16 -05:00
parent 1ad494cfd2
commit 31235827fc
3 changed files with 20 additions and 34 deletions

View File

@ -0,0 +1,13 @@
import { z } from "zod";
import { fromZodError } from 'zod-validation-error';
export default function(data) {
// Draft content, validate `draft` front matter
let result = z.object({
draft: z.boolean().or(z.undefined()),
}).safeParse(data);
if(result.error) {
throw fromZodError(result.error);
}
}

View File

@ -1,40 +1,6 @@
import { z } from "zod";
import { fromZodError } from 'zod-validation-error';
export default { export default {
tags: [ tags: [
"posts" "posts"
], ],
"layout": "layouts/post.njk", "layout": "layouts/post.njk",
// Draft blog posts, validate `draft` front matter
eleventyDataSchema: function(data) {
let result = z.object({
draft: z.boolean().or(z.undefined()),
}).safeParse(data);
if(result.error) {
throw fromZodError(result.error);
}
},
// Draft blog posts, exclude from builds and collections
eleventyComputed: {
permalink: (data) => {
// Always skip during non-watch/serve builds
if(data.draft && process.env.ELEVENTY_RUN_MODE === "build") {
return false;
}
return data.permalink;
},
eleventyExcludeFromCollections: (data) => {
// Always exclude from non-watch/serve builds
if(data.draft && process.env.ELEVENTY_RUN_MODE === "build") {
return true;
}
return data.eleventyExcludeFromCollections;
}
}
}; };

View File

@ -8,6 +8,13 @@ import pluginFilters from "./_config/filters.js";
/** @param {import("@11ty/eleventy").UserConfig} eleventyConfig */ /** @param {import("@11ty/eleventy").UserConfig} eleventyConfig */
export default async function(eleventyConfig) { export default async function(eleventyConfig) {
// Drafts, see also _data/eleventyDataSchema.js
eleventyConfig.addPreprocessor("drafts", "*", (data, content) => {
if(data.draft && process.env.ELEVENTY_RUN_MODE === "build") {
return false;
}
});
// Copy the contents of the `public` folder to the output folder // Copy the contents of the `public` folder to the output folder
// For example, `./public/css/` ends up in `_site/css/` // For example, `./public/css/` ends up in `_site/css/`
eleventyConfig eleventyConfig