Skip to content

openportfolios/schema

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@openportfolios/schema

Schema Zod, tipos TypeScript e validador do portfolio.config.json usado pelos templates do OpenPortfolios.

Instalação

npm install @openportfolios/schema

Uso

import { validateConfig, SCHEMA_VERSION } from "@openportfolios/schema";
import config from "./portfolio.config.json";

const result = validateConfig(config);

if (result.success) {
  // result.data é tipado como PortfolioConfig, com defaults aplicados
  // (meta.scale, meta.language, meta.animations, meta.credits) e
  // meta.favicon resolvido para person.avatar quando ausente.
  console.log(result.data.person.name);
} else {
  for (const error of result.errors) {
    console.error(error.message); // ex: "meta.defaultTheme: Invalid option..."
  }
}

Também é possível usar o schema Zod diretamente:

import { portfolioConfigSchema, type PortfolioConfig } from "@openportfolios/schema";

const config: PortfolioConfig = portfolioConfigSchema.parse(json);

Exports

  • portfolioConfigSchema — schema Zod do config completo, mais os sub-schemas (metaSchema, personSchema, aboutSchema, workExperienceItemSchema, educationItemSchema, projectItemSchema, skillsSchema, certificationItemSchema, blogSchema, discordActivitySchema, socialLinkSchema).
  • Tipos inferidos: PortfolioConfig, PortfolioConfigInput, Meta, Person, SocialLink, About, WorkExperienceItem, EducationItem, ProjectItem, Skills, CertificationItem, Blog, DiscordActivity.
  • validateConfig(json: unknown) — retorna { success: true, data } ou { success: false, errors }, onde cada erro tem path (ex: "projects.0.tags") e message.
  • SCHEMA_VERSION — versão do schema descrito por este pacote (atualmente 1).

Regras principais

  • meta e person são obrigatórios; about, workExperience, education, projects, skills, certifications, blog e discordActivity são opcionais e aceitam null (e [] nas seções de lista) para ocultar a seção.
  • URLs (ogImage, favicon, avatar, href, companyUrl, companyImage, certificationImage) são validadas como URL.
  • Limites: person.social até 6 itens; tags de experiência até 6; tags de projeto até 3.
  • Campos de texto rico (about.text, companyDescription, bullets, description) são strings comuns — a sintaxe de formatação não é validada.

A especificação completa do arquivo está na documentação do portfolio.config.json.

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Contributors