profound-logoProfound CMS
⌘K
Admin
Theme
DocsTutorialBlogPhilosophy
DocsTutorialBlogPhilosophy

Hybrid

Collection of Pages with ComponentsTypes of ComponentsSetup server sent events (SSE) content refetchΡύθμιση διακομιστή μεσολάβησης πίνακα διαχείρισηςCEL Scripting in Template BuilderProject ScaffoldingΒιβλιοθήκη πολυμέσων

Χωρίς κεφαλή

Γρήγορη εκκίνησηjson και Claude κώδικαςComponent Zod Pull

REST API

επισκόπηση του REST APIgetConnect your websitegetGET /routesgetGET /routegetGET /blocksgetΛήψη μπλοκ με cel cachegetGET /blocks/generatedgetGET /componentsgetGET /components/{name}getΛήψη ονόματος σχήματος συνόλου δεδομένωνgetGET /content-changes (SSE)patchPATCH /dataset/{schema_name}postPOST /translationpatchPATCH /translationsgetGET /usagepostPOST /csvpatchPATCH /csv
All Systems Operational
Powered Byprofound-logo
Theme

Component Zod Pull

Ανακτήστε την περιγραφή Zod των components σας τη στιγμή της μεταγλώττισης χρησιμοποιώντας ένα script

Αυτή η δυνατότητα σας επιτρέπει να λάβετε την περιγραφή του component σας με τη μορφή μιας type-safe περιγραφής "Zod", η οποία προσφέρει επικύρωση σχημάτων με προτεραιότητα στο TS και στατικό προσδιορισμό τύπων για το περιεχόμενό σας.

https://zod.dev

Για να τραβήξουμε το Zod schema μας, θα φορτώσουμε μερικές εξαρτήσεις και θα δημιουργήσουμε ένα script που χρησιμοποιεί ορισμένες βοηθητικές συναρτήσεις από το cms-renderer μας.

Ας ξεκινήσουμε με τη δομή του έργου μας

apps/
 web/
 app/
   page.tsx
 scripts/
   generate-schemas.ts // εδώ βρίσκεται το script μας

Τώρα θα επεξεργαστούμε αυτό το αρχείο generated-schema.ts

import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config'; // εισάγοντας το config μου

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] Το NEXT_PUBLIC_CMS_API_URL δεν έχει οριστεί. Ορίστε το στο περιβάλλον σας ή στο αρχείο .env.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] Το NEXT_PUBLIC_PROFOUND_WEBSITE_ID δεν έχει οριστεί. Ορίστε το στο περιβάλλον σας ή στο αρχείο .env.'
    );
  }
  if (!apiKey) {
    throw new Error(
      '[generate-schemas] Το PROFOUND_API_KEY δεν έχει οριστεί. Ορίστε το στο περιβάλλον σας ή στο αρχείο .env.'
    );
  }

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

  if (schemas.length === 0) {
    throw new Error(
      '[generate-schemas] Δεν επιστράφηκαν components από το API. Ελέγξτε ότι το PROFOUND_API_KEY είναι έγκυρο και δείχνει στο σωστό website.'
    );
  }

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

  console.log('[generate-schemas] Ολοκληρώθηκε.');
}

main().catch((err) => {
  console.error('[generate-schemas] Απέτυχε:', err);
  process.exit(1);
});

Το CmsConfig σας θα πρέπει να μοιάζει με

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

Μέσα στο package.json μας, ορίζουμε πώς θα τρέξουμε το script και μερικές εξαρτήσεις

ΣΗΜΕΙΩΣΗ: Αν δεν έχετε tsconfig, τότε μπορείτε να αφαιρέσετε το flag --tsconfig και την τιμή του

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

Τώρα, αφού εκτελέσουμε

$ bun run generate-schemas
tsx --tsconfig tsconfig.json scripts/generate-schemas.ts
[generate-schemas] Ολοκληρώθηκε.

Θα πρέπει να λάβουμε ένα παρόμοιο αποτέλεσμα και μπορούμε να δούμε ένα νέο αρχείο στη δομή του έργου μας

apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // εδώ βρίσκεται το script μας
 generated/
   cms-schema.ts // παραγόμενο zod schema

Μπορείτε να το εξετάσετε και να δείτε πώς φαίνεται το schema σας. Για να ενημερώσετε αυτό το αρχείο, πρέπει να εκτελέσετε ξανά την εντολή bun run generate-schemas, την οποία μπορείτε να συνδέσετε στη ροή εργασίας dev ή build.

Στη συνέχεια μπορούμε να τραβήξουμε αυτά τα αντικείμενα zod μέσα στο αρχείο page.tsx μας ως εξής

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

// καλέστε petFoodPostSchema.parse(obj) για type-safe ανάλυση αντικειμένων

Μπορείτε να ενημερώσετε το component σας από το admin panel και να τραβήξετε ξανά το ενημερωμένο schema για εύκολη ανάπτυξη

Continue Reading
Previous‹json και Claude κώδικας