All Systems Operational
Powered By
profound-logo
profound-logoProfound CMS
⌘K
Admin

Component Zod Ophalen

Haal de Zod-beschrijving van je componenten op compile-tijd op met een script

Continue Reading
Previous‹Json En Claude Code

Deze functie stelt je in staat om je schemaomschrijving te verkrijgen in de vorm van een typeveilige "Zod"-beschrijving die TS-first schema-validatie en statische type-inferentie voor je schema biedt.

https://zod.dev

Om ons Zod-schema op te halen, gaan we wat afhankelijkheden laden en een script maken dat enkele hulpmiddelen uit onze cms-renderer gebruikt

Laten we beginnen met onze projectstructuur

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // hier bevindt zich ons script

Nu gaan we dit bestand generated-schema.ts bewerken

generated-schema.ts theme={null}
import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config'; // mijn config importeren

async function main() {
  const { cmsUrl, websiteId } = cmsConfig;

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL is niet ingesteld. Stel hem in je omgeving of .env-bestand in.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] CMS_WEBSITE_ID is niet ingesteld. Stel hem in je omgeving of .env-bestand in.'
    );
  }

  await saveZodSchemaCode(
    await fetchAllCustomSchemaFields(cmsConfig),
    './generated/cms-schemas.ts'
  );

  console.log('[generate-schemas] Klaar.');
}

main().catch((err) => {
 console.error('[generate-schemas] Mislukt:', err);
  process.exit(1);
});

Je CmsConfig zou er als volgt uit moeten zien

theme={null}
export const cmsConfig = {
  cmsUrl: process.env.NEXT_PUBLIC_CMS_API_URL,
  apiKey: process.env.CMS_API_KEY,
  websiteId: '...',
};

In onze package.json definiëren we hoe we het script uitvoeren en enkele afhankelijkheden

OPMERKING: Als je geen tsconfig hebt, kun je de vlag --tsconfig en de bijbehorende waarde verwijderen

package.json theme={null}
{
  "name": "web",
  "version": "0.1.0",
  "type": "module",
  "private": true,
  "scripts": {
    "generate-schemas": "tsx --tsconfig tsconfig.json scripts/generate-schemas.ts",
    "...": "..."
  },

Nu, nadat we het volgende hebben uitgevoerd

$ bun run generate-schemas
tsx --tsconfig tsconfig.json scripts/generate-schemas.ts
[generate-schemas] Klaar.

We zouden een vergelijkbare output moeten krijgen en we zien een nieuw bestand in onze projectstructuur

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // hier bevindt zich ons script
 generated/
   cms-schema.ts // gegenereerd zod-schema

Je kunt erin kijken en zien hoe je schema eruitziet. Om dit bestand bij te werken, moet je het commando bun run generate-schemas opnieuw uitvoeren, wat je kunt koppelen aan je dev- of build-workflow.

We kunnen deze Zod-objecten vervolgens in ons page.tsx-bestand binnenhalen als volgt

page.tsx theme={null}
import type { PetFoodPost, SiteConfig } from '@/generated/cms-schemas';
import { petFoodPostSchema } from '@/generated/cms-schemas';

// roep petFoodPostSchema.parse(obj) aan voor typeveilige parsing van objecten

Je kunt je schema bijwerken vanuit het beheerpaneel en het bijgewerkte schema opnieuw ophalen voor eenvoudige ontwikkeling

"dependencies": {
"cms-renderer": "0.3.1",
"zod": "^4.3.6",
"...": "..."
},
"devDependencies": {
"tsx": "^4.21.0",
"object-hash": "^3.0.0",
"...": "..."
}
}

Hybride

Renderer ProjectParametrische RouteringComponenttypenSseInstellen Beheerderspaneel ProxyStatische Rendering Met Ondersteuning Voor BewerkmodusScripting In SjabloonbouwerCreate Profound Next

Koploos

SnelstartJson En Claude CodeComponent Zod Ophalen

Mcp

Mcp

Cms Functies

Feat Docs TemplateFeat SjabloonbouwerFeat VertalerFeat Organisatie

Motivatie

Onze Aanpak

Terminologie

Hybride Vs Headless