4.5.2 • Published 5 months ago

contentful-to-zod v4.5.2

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

🚀 contentful-to-zod

npm version License: MIT TypeScript

🔄 Generate type-safe Zod schemas from your Contentful content types with ease!

💡 Why?

By validating our contentful data with zod, we can catch any unhandled schema changes and protect ourselves from unexpected runtime errors.

🚀 Quick Start

📦 Install

# npm
npm install -D contentful-to-zod

# yarn
yarn add -D contentful-to-zod

# pnpm
pnpm install -D contentful-to-zod

📤 Export Your Contentful Schema

contentful space export \
  --space-id <SPACE_ID> \
  --management-token <MANAGEMENT_TOKEN> \
  --content-file ./contentful.json \
  --content-model-only=true

⚡️ Generate Schemas

npx contentful-to-zod --input ./contentful.json --output ./schemas.ts

Browse a sample output here

📝 Configuration

You can customize the generator behavior by creating a contentful-to-zod.config.js or contentful-to-zod.config.mjs file in your project root:

// contentful-to-zod.config.js
/** @type {import('contentful-to-zod').ContentfulToZodConfig} */
export default {
  // Generate flat schemas without references
  flat: true,

  // Allow unknown keys in objects
  passthrough: true,

  // Throw error for unsupported types
  abortOnUnknown: false,

  // Custom naming functions
  toTypeName: (entity) => `${entity}Type`,
  toSchemaName: (entity) => `${entity}Schema`,
};

The configuration file supports all generator options. CLI arguments take precedence over config file options.

🚀 Use Schemas

import contentful from "contentful";
import { pageSchema } from "./schemas";

const client = contentful.createClient({
  // ...
});

const response = await client.getEntries({
  content_type: "page",
});

const pages = response.items.map((item) => pageSchema.parse(item));

🛠 CLI Options

OptionDescriptionDefault
-i, --input <path>Path to Contentful schema JSON fileRequired
-o, --output <path>Output path for generated TypeScript fileRequired
--passthroughAllow unknown keys in objectsfalse
-a, --abort-on-unknownThrow error for unsupported types instead of using z.unknown()false
-f, --flatGenerate flat schemas without referencesfalse

📝 License

MIT

Contributing

Release

npm version major|minor|patch
git push origin main
VERSION=v$(npm version | grep contentful-to-zod | cut -d"'" -f 4)
git push origin $VERSION
gh release create $VERSION --title $VERSION --generate-notes
4.5.0

5 months ago

4.5.2

5 months ago

4.4.0

7 months ago

4.2.2

7 months ago

4.1.0

7 months ago

4.0.0

7 months ago

4.3.0

7 months ago

4.2.1

7 months ago

4.2.0

7 months ago

3.0.0

7 months ago

2.0.0

7 months ago

1.0.0

7 months ago