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

Componente Zod Puxar

Obtenha a descrição Zod dos seus componentes em tempo de compilação usando um script

Continue Reading
Previous‹Json E Claude Code

Híbrido

Projeto RenderizadorRoteamento ParamétricoTipos De ComponentesSseConfigurar Proxy Do Painel AdministrativoRenderização estática com suporte ao modo de ediçãoScripting no Construtor de TemplatesCreate Profound Next

Sem interface

Início rápidoJson E Claude CodeComponente Zod Puxar

Mcp

Mcp

Recursos Do Cms

Recurso Modelo De DocumentosRecurso Construtor De ModelosTradutor De FuncionalidadesRecurso Organizacao

Motivação

Nossa Abordagem

Terminologia

Hibrido Vs Headless

Este recurso permite que você obtenha a descrição do seu esquema na forma de uma descrição "Zod" com segurança de tipos, que oferece validação de esquemas com foco em TS e inferência de tipos estática para o seu esquema.

https://zod.dev

Para obter nosso esquema Zod, vamos carregar algumas dependências e criar um script que usa algumas utilidades do nosso cms-renderer.

Comecemos pela estrutura do nosso projeto

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // é aqui que nosso script fica

Agora vamos editar o arquivo generated-schema.ts

generated-schema.ts theme={null}
import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config'; // importando minha configuração

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

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL não está definida. Defina-a no seu ambiente ou arquivo .env.'
    );
  }
  if (!websiteId) {
    throw new Error(
      '[generate-schemas] CMS_WEBSITE_ID não está definida. Defina-a no seu ambiente ou arquivo .env.'
    );
  }

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

  console.log('[generate-schemas] Concluído.');
}

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

Seu CmsConfig deve ser parecido com

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

Dentro do nosso package.json definimos como executar o script e algumas dependências

OBSERVAÇÃO: Se você não tiver um tsconfig, pode remover a flag --tsconfig e seu valor

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

Agora, depois de executar

$ bun run generate-schemas
tsx --tsconfig tsconfig.json scripts/generate-schemas.ts
[generate-schemas] Concluído.

Devemos obter uma saída semelhante e podemos ver um novo arquivo na estrutura do projeto

theme={null}
apps/
 web/
 app/
   page.tsx
 scripts/
   generated-schema.ts // é aqui que nosso script fica
 generated/
   cms-schema.ts // esquema zod gerado

Você pode inspecionar dentro dele e ver como o seu esquema fica. Para atualizar esse arquivo, você precisa executar novamente o comando bun run generate-schemas, que pode ser conectado ao seu fluxo de trabalho de dev ou build.

Podemos então importar esses objetos Zod no nosso arquivo page.tsx da seguinte forma

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

// chame petFoodPostSchema.parse(obj) para análise segura por tipo de objetos

Você pode atualizar seu esquema pelo painel administrativo e obter o esquema atualizado novamente para um desenvolvimento mais fácil

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