npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

core-value-objects

v1.0.2

Published

Biblioteca de Value Objects reutilizáveis para domínios de negócio

Downloads

110

Readme

📦 Core Value Objects

Biblioteca de Value Objects reutilizáveis para aplicações Node.js/TypeScript, com foco em domínios brasileiros como CPF/CNPJ, E-mail, Telefone e outros tipos de dados comuns.


✨ Objetivo

Centralizar e padronizar a validação, formatação e comparação de valores fundamentais utilizados em diversos contextos de negócio, seguindo princípios de Domain-Driven Design (DDD) e Clean Architecture.


🚀 Instalação

Via NPM:

npm install core-value-objects

Via Yarn:

yarn add core-value-objects

Local (link simbólico):

npm install /caminho/absoluto/para/core-value-objects
# ou
yarn add /caminho/absoluto/para/core-value-objects

Ou via GitHub:

npm install git+https://github.com/ostrowskijr/core-value-objects.git
# ou
yarn add git+https://github.com/ostrowskijr/core-value-objects.git

📦 Value Objects disponíveis

🏠 Endereços e Localização

Cep

import { Cep } from "core-value-objects";

const cep = new Cep("80000-000");
cep.getValue(); // "80000000"
cep.getValueFormatted(); // "80000-000"

Cidade

import { Cidade } from "core-value-objects";

const cidade = new Cidade("Curitiba");
cidade.getValue(); // "Curitiba"

Logradouro

import { Logradouro } from "core-value-objects";

const logradouro = new Logradouro("Rua das Flores");
logradouro.getValue(); // "Rua das Flores"

UF

import { UF } from "core-value-objects";

const uf = new UF("  sp  ");
uf.getValue(); // "SP"

Endereco (VO Composto)

import { Endereco, Cep, Cidade, Logradouro, UF } from "core-value-objects";

const endereco = new Endereco({
  cep: new Cep("80000-000"),
  uf: new UF("PR"),
  cidade: new Cidade("Curitiba"),
  logradouro: new Logradouro("Rua Teste"),
  numero: "123",
  bairro: "Centro",
  complemento: "Apto 456",
});

endereco.getValueFormatted();
// "Rua Teste, 123 - Centro, Curitiba - PR, CEP: 80000-000, Apto 456"

👤 Identificação e Dados Pessoais

CpfCnpj

import { CpfCnpj } from "core-value-objects";

const cpf = new CpfCnpj("123.456.789-09");
cpf.getValue(); // "12345678909"
cpf.getValueFormatted(); // "123.456.789-09"

const cnpj = new CpfCnpj("12.345.678/0001-90");
cnpj.getValue(); // "12345678000190"
cnpj.getValueFormatted(); // "12.345.678/0001-90"

Crp

import { Crp } from "core-value-objects";

const crp = new Crp("06/12345");
crp.getValue(); // "0612345"
crp.getValueFormatted(); // "06/12345"

Nome

import { Nome } from "core-value-objects";

// Nome válido com nome e sobrenome
const nome = new Nome("João Silva");
nome.getValue(); // "João Silva"

// Nome com múltiplas palavras (nome, sobrenome, etc.)
const nomeCompleto = new Nome("  João da Silva  ");
nomeCompleto.getValue(); // "João da Silva" (espaços normalizados)

// Nome com acentos e caracteres especiais
const nomeEspecial = new Nome("José D'Ávila");
nomeEspecial.getValue(); // "José D'Ávila"

// Validações automáticas:
// ✅ Deve conter ao menos nome e sobrenome
// ✅ Cada parte deve ter ao menos 2 caracteres
// ✅ Aceita letras, acentos, espaços, hífens e apóstrofos
// ❌ Rejeita: "João" (apenas uma palavra), "J Silva" (parte muito curta)

UUID

import { UUID } from "core-value-objects";

// Gera um UUID automático
const uuid = new UUID();
uuid.getValue(); // "550e8400-e29b-41d4-a716-446655440000"

// Ou use um UUID específico
const uuidCustom = new UUID("550e8400-e29b-41d4-a716-446655440000");

📞 Comunicação

Email

import { Email } from "core-value-objects";

const email = new Email(" [email protected] ");
email.getValue(); // "[email protected]"

Telefone

import { Telefone } from "core-value-objects";

const tel = new Telefone("(11) 98765-4321");
tel.getValue(); // "11987654321"
tel.getValueFormatted(); // "(11) 98765-4321"

💳 Financeiro e Pagamentos

CreditCard

import { CreditCard } from "core-value-objects";

const card = new CreditCard("4992 7345 6789 1234");
card.getValue(); // "4992734567891234"
card.getValueFormatted(); // "4992 7345 6789 1234"

ValorReal

import { ValorReal } from "core-value-objects";

const valor = new ValorReal(1234.56);
valor.getValue(); // 1234.56
valor.getValueFormatted(); // "R$ 1.234,56"

Percentual

import { Percentual } from "core-value-objects";

const percentual = new Percentual(25.5);
percentual.getValue(); // 25.5
percentual.getValueFormatted(); // "25.50%"

// Valida automaticamente: 0% <= percentual <= 100%

📅 Data e Hora

Data

import { Data } from "core-value-objects";

const data = new Data("2025-07-31");
data.getValue(); // Objeto Date de '2025-07-31T03:00:00.000Z'
data.getValueFormatted(); // "31/07/2025"

Horario

import { Horario } from "core-value-objects";

const horario = new Horario("14:30");
horario.getValue(); // "14:30"
horario.getValueFormatted(); // "14h30"

🔐 Segurança

Password

import { Password } from "core-value-objects";

// Lança erro se a senha não atender aos critérios de segurança
const senha = new Password("Senha@123");

✅ Validações automáticas

Todos os VOs lançam Error se o valor for inválido, logo são seguros por construção. As validações incluem:

  • Formato: Verificação de padrões e estruturas válidas
  • Faixa de valores: Percentuais entre 0% e 100%, valores positivos, etc.
  • Integridade: Validação de CPF/CNPJ, cartão de crédito, etc.
  • Segurança: Critérios de senha forte
  • Composição: Nomes devem conter ao menos nome e sobrenome, cada parte com mínimo de 2 caracteres

🧪 Testes

Para rodar os testes unitários:

# Instalar dependências
npm install
# ou
yarn install

# Executar testes
npm test
# ou
yarn test

🛠️ Build

npm run build
# ou
yarn build

Gera os arquivos .js e .d.ts dentro da pasta dist/.


🏗️ Arquitetura

Este projeto segue os princípios de:

  • Domain-Driven Design (DDD): Value Objects como conceito central do domínio
  • Clean Architecture: Separação clara de responsabilidades
  • Clean Code: Código legível, testável e mantível
  • SOLID: Princípios de design orientado a objetos

📦 Gerenciamento de Dependências

NPM vs Yarn

Este projeto suporta tanto NPM quanto Yarn como gerenciadores de pacotes. Escolha o que preferir:

| Comando | NPM | Yarn | | -------------------- | ---------------------- | ------------------- | | Instalar | npm install | yarn install | | Adicionar | npm install <pkg> | yarn add <pkg> | | Testes | npm test | yarn test | | Build | npm run build | yarn build | | Dev Dependencies | npm install -D <pkg> | yarn add -D <pkg> |


🚀 Scripts Disponíveis

Desenvolvimento

# Instalar dependências
npm install
# ou
yarn install

# Executar testes em modo watch
npm run test:watch
# ou
yarn test:watch

# Executar testes com coverage
npm run test:cov
# ou
yarn test:cov

Produção

# Build do projeto
npm run build
# ou
yarn build

# Limpar build (Linux/Mac)
npm run clean
# ou
yarn clean

# No Windows, use:
# rmdir /s dist
# ou delete manualmente a pasta dist/

🔍 Validações Específicas por VO

📝 Nome

  • Estrutura: Deve conter ao menos nome e sobrenome
  • Comprimento: Cada parte deve ter mínimo de 2 caracteres
  • Caracteres: Aceita letras, acentos, espaços, hífens e apóstrofos
  • Normalização: Remove espaços múltiplos automaticamente
  • Exemplos válidos: "João Silva", "Maria da Silva", "José D'Ávila"
  • Exemplos inválidos: "João", "J Silva", "João123 Silva"

📝 Licença

MIT - Luis A. Ostrowski Jr. [email protected]