profound-logoProfound CMS
⌘K
Admin
Theme
DocsTutorialBlogPhilosophy
DocsTutorialBlogPhilosophy

Hybrid

Collection of Pages with ComponentsTypes of ComponentsSetup server sent events (SSE) content refetchYlläpitäjän hallintapaneelin välityspalvelimen määrittäminenCEL Scripting in Template BuilderProject ScaffoldingMedia Library

Headless

PikakäynnistysSplit Screen JSON Component Builder with LLMComponent Zod Pull

REST-ohjelmointirajapinta

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}postPOST /translationpatchPATCH /translationsgetKäytön hakeminenpostPOST /csvpatchPATCH /csv
All Systems Operational
Powered Byprofound-logo
Theme

Component Zod Pull

Hae komponenttiesi Zod-kuvaus käännösaikana skriptin avulla

Tämän ominaisuuden avulla saat komponenttisi kuvauksen tyyppiturvallisena "Zod"-kuvauksena, joka tarjoaa TS-ensimmäisen skeemavalidoinnin ja staattisen tyyppipäättelyn sisällöllesi.

https://zod.dev

Kun noudamme Zod-skeemamme, lataamme joitakin riippuvuuksia ja luomme skriptin, joka käyttää cms-renderer-kirjaston työkaluja.

Aloitetaan projektirakenteestamme

apps/
 web/
 app/
   page.tsx
 scripts/
   generate-schemas.ts // this is where our script lives

Seuraavaksi muokkaamme tiedostoa generated-schema.ts

import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config'; // importing my config

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL is not set. Set it in your environment or .env file.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_PROFOUND_WEBSITE_ID is not set. Set it in your environment or .env file.'
    );
  }
  if (!apiKey) {
    throw new Error(
      '[generate-schemas] PROFOUND_API_KEY is not set. Set it in your environment or .env file.'
    );
  }

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

  if (schemas.length === 0) {
    throw new Error(
      '[generate-schemas] No components returned from the API. Check that PROFOUND_API_KEY is valid and points at the right website.'
    );
  }

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

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

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

Sinun CmsConfig-rakenteesi pitäisi näyttää tältä

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

Määrittelemme package.json-tiedostossa, miten skripti ajetaan, sekä joitakin riippuvuuksia

HUOM: Jos sinulla ei ole tsconfigia, voit poistaa --tsconfig-lipun ja sen arvon

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

Kun ajamme seuraavan komennon

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

Meidän pitäisi saada samanlainen tuloste, ja projektirakenteeseen ilmestyy uusi tiedosto

apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // this is where our script lives
 generated/
   cms-schema.ts // generated zod schema

Voit tarkastella tiedoston sisältöä ja nähdä, miltä skeemasi näyttää. Päivittääksesi tiedoston sinun on ajettava bun run generate-schemas -komento uudelleen, minkä voit liittää dev- tai build-työnkulkuusi.

Voimme sen jälkeen tuoda nämä Zod-oliot page.tsx-tiedostoomme seuraavasti

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

// call petFoodPostSchema.parse(obj) for type safe parsing of objects

Voit päivittää komponenttisi ylläpitopaneelista ja noutaa päivitetyn skeeman uudelleen kehityksen helpottamiseksi

Continue Reading
Previous‹Split Screen JSON Component Builder with LLM