@horizon-apps/domain-schema-core
v1.4.2
Published
Core domain schema utilities for Horizon Platform - Schema generators, data enrichers, converters and specifications
Maintainers
Readme
@horizon-apps/domain-schema-core
Utilitários centrais para esquemas de domínio da Plataforma Horizon - Geradores de schema, enriquecedores de dados, conversores e especificações.
📦 Instalação
npm install @horizon-apps/domain-schema-core
# ou
pnpm add @horizon-apps/domain-schema-core🚀 Módulos e Exemplos
🎨 Enriquecedor de Dados
Transforma dados brutos em objetos enriquecidos para UI com formatação e localização.
import { domainDataDisplayEnricher, formatters } from '@horizon-apps/domain-schema-core'
// Enriquecer dados com metadata
const enriched = domainDataDisplayEnricher({
data: { valor_venda: 850000, dormitorios: 3, ativo: true },
metadata: [
{ key: 'valor_venda', format: 'currency', unit: 'BRL' },
{ key: 'dormitorios', format: 'count' },
{ key: 'ativo', type: 'Boolean' }
]
})
// enriched.valor_venda.valueLabel = "R$ 850.000,00"
// enriched.ativo.valueLabel = "Sim"
// Formatadores individuais
formatters.currency(850000, 'BRL') // "R$ 850.000,00"🔍 Filtros de Dados
Filtra campos por categoria ou chaves específicas (remove valores nulos/vazios).
import { getFieldsByCategory, getFieldsByKeys } from '@horizon-apps/domain-schema-core'
const fields = [
{ key: 'valor_venda', value: 850000, category: 'pricing' },
{ key: 'area_total', value: 120, category: 'dimensions' },
{ key: 'descricao', value: null, category: 'info' }
]
// Filtrar por categoria
const pricing = getFieldsByCategory(fields, 'pricing')
// [{ key: 'valor_venda', value: 850000, category: 'pricing' }]
// Filtrar por chaves (remove valores nulos)
const selected = getFieldsByKeys(fields, ['valor_venda', 'descricao'])
// [{ key: 'valor_venda', value: 850000, category: 'pricing' }]
// 'descricao' foi filtrado por ter value: null🔄 Transformadores de Dados
Transforma estruturas (arrays para campos booleanos individuais, ordenação multi-campo).
import { expandArrayFieldToBoolean, sortFields } from '@horizon-apps/domain-schema-core'
// Expandir array para campos booleanos
const amenities = ['Piscina', 'Academia', 'Portaria 24h']
const booleanFields = expandArrayFieldToBoolean(amenities)
// [
// { key: 'Piscina', value: true, type: 'Boolean', label: 'Piscina' },
// { key: 'Academia', value: true, type: 'Boolean', label: 'Academia' },
// { key: 'Portaria 24h', value: true, type: 'Boolean', label: 'Portaria 24h' }
// ]
// Ordenar por múltiplos campos
const properties = [
{ name: "Casa A", price: 300000, area: 120 },
{ name: "Casa B", price: 250000, area: 100 },
{ name: "Casa A", price: 280000, area: 110 }
]
const sorted = sortFields(properties, ["name:asc", "price:desc"])
// Resultado: Casa A (300k), Casa A (280k), Casa B (250k)⚡ Gerador Zod
Converte schemas Horizon para validação Zod.
import { JsonToZodGenerator } from '@horizon-apps/domain-schema-core'
const fields = [
{ key: 'nome', type: 'String', validation: { required: true, maxLength: 100 } },
{ key: 'preco', type: 'Number', validation: { min: 0 } }
]
const zodCode = JsonToZodGenerator.generate(fields, {
schemaName: 'Property'
})
// Gera código Zod: z.object({ nome: z.string().max(100), preco: z.number().min(0).optional() })🔧 Desenvolvimento
# Instalar dependências
pnpm install
# Build
pnpm build
# Executar testes
pnpm test
# Verificação de tipos
pnpm typecheck
# Modo watch
pnpm dev📄 Licença
MIT
Parte do ecossistema da Plataforma Horizon
