profound-logoProfound CMS
⌘K
Admin
Theme
DocsTutorialBlogPhilosophy
DocsTutorialBlogPhilosophy

Hybrid

Collection of Pages with ComponentsKomponenttyperSetup server sent events (SSE) content refetchInstall Profound CMS as a proxyScripting i skabelonbyggerenProject ScaffoldingMediebibliotek

Headless

HurtigstartSplit Screen JSON Component Builder with LLMComponent Zod Pull

REST API

REST API-oversigtgetConnect 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}postPOST /translationpatchPATCH /translationsgetGET /usagepostPOST /csvpatchPATCH /csv
All Systems Operational
Powered Byprofound-logo
Theme

Component Zod Pull

Hent zod-beskrivelsen af dine komponenter ved kompileringstid ved hjælp af et script

Denne funktion giver dig mulighed for at hente beskrivelsen af din komponent som en typesikker "Zod"-beskrivelse, der leverer TS-first skemavalidering og statisk typeinferens for dit indhold.

https://zod.dev

For at hente vores Zod-skema skal vi indlæse nogle afhængigheder og oprette et script, der bruger nogle hjælpefunktioner fra vores cms-renderer

Lad os starte med vores projektstruktur

apps/
 web/
 app/
   page.tsx
 scripts/
   generate-schemas.ts // det er her, vores script ligger

Nu redigerer vi filen generated-schema.ts

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

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL er ikke angivet. Angiv den i dit miljø eller din .env-fil.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_PROFOUND_WEBSITE_ID er ikke angivet. Angiv den i dit miljø eller din .env-fil.'
    );
  }
  if (!apiKey) {
    throw new Error(
      '[generate-schemas] PROFOUND_API_KEY er ikke angivet. Angiv den i dit miljø eller din .env-fil.'
    );
  }

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

  if (schemas.length === 0) {
    throw new Error(
      '[generate-schemas] Ingen komponenter blev returneret fra API'et. Kontrollér, at PROFOUND_API_KEY er gyldig og peger på den rigtige hjemmeside.'
    );
  }

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

  console.log('[generate-schemas] Færdig.');
}

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

Din CmsConfig bør se sådan ud

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

I vores package.json definerer vi, hvordan scriptet skal køres, og nogle afhængigheder

BEMÆRK: Hvis du ikke har en tsconfig, kan du fjerne --tsconfig-flaget og dets værdi

{
  "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",
    "...": "..."
  }
}

Nu, efter at vi kører

$ bun run generate-schemas
tsx --tsconfig tsconfig.json scripts/generate-schemas.ts
[generate-schemas] Færdig.

Vi bør få et lignende output, og vi kan se en ny fil i vores projektstruktur

apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // det er her, vores script ligger
 generated/
   cms-schema.ts // genereret zod-skema

Du kan kigge indeni og se, hvordan dit skema ser ud. For at opdatere denne fil skal du køre kommandoen bun run generate-schemas igen, som du kan koble til dit dev- eller build-workflow.

Derefter kan vi hente disse zod-objekter ind i vores page.tsx-fil på følgende måde

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

// kald petFoodPostSchema.parse(obj) for typesikker parsing af objekter

Du kan opdatere din komponent fra administrationspanelet og hente det opdaterede skema igen for nem udvikling

Continue Reading
Previous‹Split Screen JSON Component Builder with LLM