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

Avvio rapido

Un post sugli schemi

Continue Reading
NextJson And Claude Code›

Genera schemi Zod con sicurezza di tipo

Questa funzionalità ti permette di ottenere la descrizione del tuo schema sotto forma di uno schema Zod con sicurezza di tipo, offrendo:

  • Convalida dello schema incentrata su TypeScript
  • Inferenza statica dei tipi

Per saperne di più: https://zod.dev

Configurazione

Per recuperare il tuo schema Zod, dovrai:

  1. Caricare le dipendenze necessarie
  2. Creare uno script utilizzando le utility di cms-renderer

Struttura del progetto

apps/
  web/
    app/
      page.tsx
    scripts/
      generated-schema.ts   # file dello script

Script: generated-schema.ts

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

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL non è impostata. Impostala 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] Completato.');
}

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

Esempio di configurazione CMS

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

Configurazione di package.json

Nota: Se non hai un tsconfig.json, rimuovi il flag --tsconfig.

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

Esecuzione dello script

bun run generate-schemas

Esempio di output:

tsx --tsconfig tsconfig.json scripts/generate-schemas.ts
[generate-schemas] Completato.

Struttura del progetto aggiornata

apps/
  web/
    app/
      page.tsx
    scripts/
      generated-schema.ts
    generated/
      cms-schemas.ts   # schema Zod generato

Utilizzo in page.tsx

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

// Da usare per un parsing con sicurezza di tipo
petFoodPostSchema.parse(obj);

Note

  • Ispeziona il file generato per comprendere la struttura del tuo schema
  • Esegui nuovamente lo script ogni volta che il tuo schema cambia:
bun run generate-schemas
  • Puoi integrarlo nel tuo flusso di lavoro di sviluppo o di build
  • Aggiorna gli schemi tramite il pannello di amministrazione, quindi rigenerali in locale
"cms-renderer"
:
"0.3.1"
,
"zod": "^4.3.6",
"...": "..."
},
"devDependencies": {
"tsx": "^4.21.0",
"object-hash": "^3.0.0",
"...": "..."
}
}

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