profound-logoProfound CMS
⌘K
Admin
Theme
DocsTutorialBlogPhilosophy
DocsTutorialBlogPhilosophy

Hybrid

Collection of Pages with ComponentsTypes of ComponentsSetup server sent events (SSE) content refetchInstall Profound CMS as a proxySkripting i malbyggerenProject ScaffoldingMedia Library

Headless

Quick startSplit Screen JSON Component Builder with LLMComponent Zod Pull

REST API

REST API OverviewgetConnect your websitegetGET /routesgetGET /routegetGET /blocksgetGET /blocks/with-cel-cachegetGET /blocks/generatedgetGET /componentsgetGET /components/{name}getGET /dataset/{schema_name}getGET /content-changes (SSE)patchPATCH /dataset/{schema_name}postEtteroversettelsepatchPATCH /translationsgetGET /usagepostPOST /csvpatchPATCH /csv
All Systems Operational
Powered Byprofound-logo
Theme

Component Zod Pull

Hent Zod-beskrivelsen av komponentene dine ved kompileringstid ved hjelp av et skript

Denne funksjonen lar deg hente beskrivelsen av komponenten din i form av en typesikker «Zod»-beskrivelse, som gir TS-først skjemavalidering og statisk typeinferens for innholdet ditt.

https://zod.dev

For å hente Zod-skjemaet vårt skal vi laste inn noen avhengigheter og lage et skript som bruker noen verktøy fra cms-renderer.

La oss begynne med prosjektstrukturen vår

apps/
 web/
 app/
   page.tsx
 scripts/
   generate-schemas.ts // dette er der skriptet vårt ligger

Nå skal vi redigere denne generated-schema.ts-filen

import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config'; // importerer konfigurasjonen min

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL er ikke satt. Angi den i miljøet ditt eller .env-filen.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_PROFOUND_WEBSITE_ID er ikke satt. Angi den i miljøet ditt eller .env-filen.'
    );
  }
  if (!apiKey) {
    throw new Error(
      '[generate-schemas] PROFOUND_API_KEY er ikke satt. Angi den i miljøet ditt eller .env-filen.'
    );
  }

  const schemas = await fetchAllCustomSchemaFields({ cmsUrl, websiteId, apiKey });

  if (schemas.length === 0) {
    throw new Error(
      '[generate-schemas] Ingen komponenter returnert fra API-et. Kontroller at PROFOUND_API_KEY er gyldig og peker på riktig nettsted.'
    );
  }

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

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

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

Din CmsConfig bør se slik ut

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

I package.json definerer vi hvordan skriptet skal kjøres og noen avhengigheter

MERK: Hvis du ikke har en tsconfig, kan du fjerne flagget --tsconfig og verdien

{
  "name": "web",
  "version": "0.1.0",
  "type": "module",
  "private": true,
  "scripts": {
    "generate-schemas": "tsx --tsconfig tsconfig.json scripts/generate-schemas.ts",
    "...": "..."
  },
  "dependencies": {
    "cms-renderer": "0.3.1",
    "zod": "^4.3.6",
    "...": "..."
  },
  "devDependencies": {
    "tsx": "^4.21.0",
 "object-hash": "^3.0.0",
    "...": "..."
  }
}

Nå, etter at vi kjører

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

Skal vi få et lignende resultat, og vi kan se en ny fil i prosjektstrukturen vår

apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // dette er der skriptet vårt ligger
 generated/
   cms-schema.ts // generert zod-skjema

Du kan inspisere den og se hvordan skjemaet ditt ser ut. For å oppdatere denne filen må du kjøre kommandoen bun run generate-schemas igjen, som du kan koble til dev- eller build-arbeidsflyten din.

Vi kan så hente disse Zod-objektene inn i page.tsx-filen vår på denne måten

import type { PetFoodPost, SiteConfig } from '@/generated/cms-schemas';
import { petFoodPostSchema } from '@/generated/cms-schemas';

// kall petFoodPostSchema.parse(obj) for typesikker parsing av objekter

Du kan oppdatere komponenten din fra administrasjonspanelet og hente det oppdaterte skjemaet igjen for enkel utvikling

Continue Reading
Previous‹Split Screen JSON Component Builder with LLM