Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
zachleat committed Sep 25, 2024
1 parent f90545c commit 042433c
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/docs/data-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ There are a few special data keys you can assign in your data to control how tem
- `templateEngineOverride`: Override the template engine on a per-file basis. [Read more about Changing a Template’s Rendering Engine](/docs/languages/#overriding-the-template-language). [_This option only works in Front Matter ⚠️ (for now), read Issue #445_](https://github.com/11ty/eleventy/issues/445).
- `eleventyExcludeFromCollections`: {% addedin "0.8.0" %} Set to `true` to exclude this content from any and all [Collections](/docs/collections/) (those tagged in data or setup using the Configuration API).
- `eleventyComputed`: {% addedin "0.11.0" %} Programmatically set data values based on other values in your data cascade. Read more about [Computed Data](/docs/data-computed/).
- `eleventyDataSchema`: Used to [validate data](/docs/data-validate/) in the data cascade.
- `eleventyNavigation`: Used by the [Navigation plugin](/docs/plugins/navigation/#adding-templates-to-the-navigation).

## Advanced
Expand Down
34 changes: 34 additions & 0 deletions src/docs/data-validate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
eleventyNavigation:
parent: Data Cascade
key: Validate Data
order: 6
---
# Validate Data

Use the special `eleventyDataSchema` data property to validate data in your Data Cascade. You can set this anywhere in your Data Cascade (front matter, directory data file, global data, etc).

You can use any schema or validation library to achieve this. In this example, we’re using [`zod`](https://zod.dev/).

## Example: Checking that `draft` is boolean

In the following example, each content template with an `eleventyDataSchema` callback (in this example, any templates in the `blog` folder) is checked to make sure the value of any `draft` assignments must be `boolean` or `undefined`. If not, we throw an error.

<div class="codetitle">blog/blog.11tydata.js</div>

```js
import { z } from "zod";
import { fromZodError } from 'zod-validation-error';

export default {
eleventyDataSchema: function(data) {
let result = z.object({
draft: z.boolean().or(z.undefined()),
}).safeParse(data);

if(result.error) {
throw fromZodError(result.error);
}
}
};
```

0 comments on commit 042433c

Please sign in to comment.