Recupera la descrizione Zod dei tuoi componenti in fase di compilazione usando uno script
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.
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