Skip to content

feat(content): support data schema validation on build #3351

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
toddeTV opened this issue May 13, 2025 · 1 comment
Open

feat(content): support data schema validation on build #3351

toddeTV opened this issue May 13, 2025 · 1 comment
Labels
enhancement New feature or request

Comments

@toddeTV
Copy link

toddeTV commented May 13, 2025

Is your feature request related to a problem? Please describe

For the development of the new website for the 3D printing conference Printed-Amsterdam, I chose Nuxt 3 with @nuxt/content in combination with Nuxt Studio. This setup was intended to provide an intuitive and user-friendly experience, especially for non-technical users.

However, while creating the data schema, I encountered two fundamental missing features:

The code is available in this open-source repository for the community:
https://github.com/toddeTV/printed-amsterdam.com

Describe the solution you'd like

It would be helpful if, during the build process, all files within the content folder were validated. Since all collections are already loaded during the build, it would be feasible to crawl the corresponding source folders, open all related files, and validate them against a schema - if one is provided.

Currently, it's possible to define a content config like this:

import { defineCollection, defineContentConfig, z } from '@nuxt/content'

export default defineContentConfig({
  collections: {
    talks: defineCollection({
      type: 'data',
      source: 'talks/**/*.json',
      schema: z.object({
        title: z.string(),
        description: z.string(),
      }),
    }),
  },
})

And include a file like /content/talks/foo.json with the following content:

{
  "title": 2
}

This file passes through the build without errors and is even included in the SQLite database under the talks collection. However, this should not happen: the description field is missing - even though it's required - and the title field is a number instead of a string.

Describe alternatives you've considered

Validating a collection's schema against all its files naturally incurs a performance cost. However, skipping validation allows errors to slip through easily and makes scaling with @nuxt/content more difficult.

A possible solution would be to make schema validation optional - controlled via a flag or configuration option. For example, validation could be enabled in feature branches via CI workflows, enforced as a required step before merging, and disabled on the main branch to speed up regular builds.

Additional context

None.

@farnabaz
Copy link
Member

Thanks for the issue @toddeTV
Build validation and nested schemas are in the module roadamp. The first step for these features is to move from Zod to a general solution, which is started in #3347

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants