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

Bileşen Zod Çekme

Bir betik kullanarak bileşenlerinizin zod tanımını derleme zamanında çekin

Continue Reading
Previous‹Json Ve Claude Kod

Hibrit

Renderer ProjesiParametrik YönlendirmeBileşenler TürleriSseYönetici paneli proxy kurulumuDuzenleme Modu Destegiyle Statik IslemeŞablon Oluşturucuda Betik YazmaCreate Profound Next

Başsız

Hızlı başlangıçJson Ve Claude KodBileşen Zod Çekme

Mcp

Mcp

Cms Özellikleri

Özellik Belgeler ŞablonuÖzellik Şablon OluşturucuÖzellik ÇeviriciÖzellik Organizasyon

Motivasyon

Bizim yaklaşımımız

Terminoloji

Hibrit Vs Headless

Bu özellik, şemanız için TS-öncelikli şema doğrulaması ve statik tür çıkarımı sağlayan, tür açısından güvenli bir "Zod" tanımı biçiminde şema açıklamasını elde etmenize olanak tanır.

https://zod.dev

Zod şemamızı çekmek için bazı bağımlılıkları yükleyecek ve cms-rendererımızdan bazı yardımcı işlevleri kullanan bir betik oluşturacağız.

Proje yapımızla başlayalım

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // betiğimizin bulunduğu yer

Şimdi bu generated-schema.ts dosyasını düzenleyeceğiz

generated-schema.ts theme={null}
import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config'; // yapılandırmamı içe aktarıyorum

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL ayarlanmadı. Ortamınızda ya da .env dosyanızda ayarlayın.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] CMS_WEBSITE_ID ayarlanmadı. Ortamınızda ya da .env dosyanızda ayarlayın.'
    );
  }

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

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

main().catch((err) => {
  console.error('[generate-schemas] Başarısız oldu:', err);
  process.exit(1);
});

CmsConfiginiz şu şekilde görünmelidir

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

package.json dosyamızın içinde betiğin nasıl çalıştırılacağını ve bazı bağımlılıkları tanımlıyoruz

NOT: Bir tsconfig'iniz yoksa --tsconfig bayrağını ve değerini kaldırabilirsiniz

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

Şimdi aşağıdakini çalıştırdıktan sonra

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

Benzer bir çıktı almalıyız ve proje yapımızda yeni bir dosya görebiliriz

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // betiğimizin bulunduğu yer
 generated/
   cms-schema.ts // oluşturulan zod şeması

İçini inceleyerek şemanızın nasıl göründüğünü görebilirsiniz. Bu dosyayı güncellemek için dev veya build iş akışınıza bağlayabileceğiniz bun run generate-schemas komutunu yeniden çalıştırmanız gerekir.

Daha sonra bu zod nesnelerini page.tsx dosyamıza şu şekilde çekebiliriz

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

// Nesneleri tür açısından güvenli şekilde ayrıştırmak için petFoodPostSchema.parse(obj) işlevini çağırın

Şemanızı yönetim panelinden güncelleyebilir ve kolay geliştirme için güncellenmiş şemayı yeniden çekebilirsiniz.

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