From 31235827fc0ca93b4bb0372e3808d3ee218ce40b Mon Sep 17 00:00:00 2001
From: Zach Leatherman <zachleat@users.noreply.github.com>
Date: Tue, 24 Sep 2024 12:18:16 -0500
Subject: [PATCH] Drastically simplify the drafts workflow

---
 _data/eleventyDataSchema.js   | 13 +++++++++++++
 content/blog/blog.11tydata.js | 34 ----------------------------------
 eleventy.config.js            |  7 +++++++
 3 files changed, 20 insertions(+), 34 deletions(-)
 create mode 100644 _data/eleventyDataSchema.js

diff --git a/_data/eleventyDataSchema.js b/_data/eleventyDataSchema.js
new file mode 100644
index 0000000..ca764ec
--- /dev/null
+++ b/_data/eleventyDataSchema.js
@@ -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);
+	}
+}
diff --git a/content/blog/blog.11tydata.js b/content/blog/blog.11tydata.js
index 1a1e976..614f505 100644
--- a/content/blog/blog.11tydata.js
+++ b/content/blog/blog.11tydata.js
@@ -1,40 +1,6 @@
-import { z } from "zod";
-import { fromZodError } from 'zod-validation-error';
-
 export default {
 	tags: [
 		"posts"
 	],
 	"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;
-		}
-	}
 };
diff --git a/eleventy.config.js b/eleventy.config.js
index c73e75e..668f6ee 100644
--- a/eleventy.config.js
+++ b/eleventy.config.js
@@ -8,6 +8,13 @@ import pluginFilters from "./_config/filters.js";
 
 /** @param {import("@11ty/eleventy").UserConfig} 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
 	// For example, `./public/css/` ends up in `_site/css/`
 	eleventyConfig