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

Component Zod Pull

Recupera la descrizione Zod dei tuoi componenti in fase di compilazione usando uno script

Continue Reading
Previous‹Json And Claude Code

Ibrido

Progetto RendererInstradamento parametricoTipi Di ComponentiSseConfigura Proxy Pannello Di AmministrazioneRendering Statico Con Supporto Della Modalita Di ModificaScripting Nel Template BuilderCreate Profound Next

Senza testa

Avvio rapidoJson And Claude CodeComponent Zod Pull

Mcp

Mcp

funzionalità CMS

Feat Modello DocumentazioneFunzionalità Generatore Di ModelliFeat TraduttoreFeat Organizzazione

Motivazione

Il nostro approccio

Terminologia

Ibrido vs Headless

Questa funzionalità ti permette di ottenere la descrizione dello schema sotto forma di una descrizione type-safe "Zod", che fornisce una validazione dello schema orientata a TypeScript e l'inferenza statica dei tipi per il tuo schema.

https://zod.dev

Per recuperare il nostro schema Zod, caricheremo alcune dipendenze e creeremo uno script che utilizza alcune utility del nostro cms-renderer.

Iniziamo dalla struttura del progetto

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // qui risiede il nostro script

Ora modificheremo questo file generated-schema.ts

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

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL non è impostato. Impostalo nel tuo ambiente o nel file .env.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] CMS_WEBSITE_ID non è impostato. Impostalo nel tuo ambiente o nel file .env.'
    );
  }

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

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

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

Il tuo CmsConfig dovrebbe apparire così

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

All'interno del nostro package.json definiamo come eseguire lo script e alcune dipendenze

NOTA: se non hai un tsconfig puoi rimuovere il flag --tsconfig e il suo valore

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

Ora, dopo aver eseguito

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

Dovremmo ottenere un output simile e potremo vedere un nuovo file nella struttura del progetto

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // qui risiede il nostro script
 generated/
   cms-schema.ts // schema zod generato

Puoi ispezionarlo e vedere come appare il tuo schema. Per aggiornare questo file devi eseguire di nuovo il comando bun run generate-schemas, che puoi collegare al tuo flusso di lavoro dev o build.

Possiamo quindi importare questi oggetti Zod nel nostro file page.tsx in questo modo

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

// chiama petFoodPostSchema.parse(obj) per un parsing type-safe degli oggetti

Puoi aggiornare il tuo schema dal pannello di amministrazione e recuperare nuovamente lo schema aggiornato per uno sviluppo più semplice

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