Skip to content

Contribuir

Jose Luiz Rodrigues edited this page Sep 10, 2026 · 2 revisions

Contribuir

Gracias por el interés. palta es open source, creada por zeluizr en asociación con commente.me.

La cobertura regional ya está completa: los 23 países existen. Lo que sigue creciendo es la profundidad. Un bug en una validación, un documento que falta en un país que ya está, un caso borde mal manejado — todo eso es bienvenido.

Antes de empezar

  • Buscá si ya hay un issue o un PR abierto para eso.
  • Para cualquier cambio que no sea una corrección chica, abrí un issue primero y discutilo.
  • Leé las reglas del proyecto más abajo. No son negociables y la CI las verifica.

Setup local

git clone https://github.com/zeluizr/palta.git
cd palta
npm install
npm test

Los tests importan directo de src/, así que corren sin haber hecho build.

comando qué hace
npm test corre todos los tests con vitest
npm run test:watch vitest en modo watch
npm run test:coverage tests más los umbrales de cobertura
npm run lint tsc --noEmit, la única puerta estática
npm run build tsup: ESM, CJS y declaraciones de tipos

Node >= 20 para desarrollar, porque vitest 4 lo exige. El paquete publicado corre en Node 16.

Flujo

  1. Fork del repositorio.
  2. Rama descriptiva:
git checkout -b feat/uy-rut        # país o módulo nuevo
git checkout -b fix/br-cpf-mask    # corrección de bug
git checkout -b docs/wiki-medidas  # documentación
  1. Implementá el cambio siguiendo las reglas.
  2. Verificá antes de abrir el PR:
npm run lint
npm run test:coverage
npm run build
  1. Abrí el Pull Request contra main.

La CI corre lint, cobertura y build en Node 22 en cada push y cada PR. Si falla, el PR no se mergea.

Reglas del proyecto

regla qué significa
Cero dependencias en runtime solo devDependencies para tooling
TypeScript estricto sin any, sin type assertions sin justificar
Funciones puras sin efectos secundarios, sin estado global, sin mutar argumentos
Defensivo format(''), validate(null) y strip(undefined) nunca pueden lanzar
Cobertura líneas y statements ≥ 94%, funciones ≥ 98%, ramas ≥ 90%
Sin efectos secundarios "sideEffects": false en package.json

Los contratos están en src/types.ts y no se inventan contratos nuevos. Si algo no encaja en DocumentModule, CurrencyModule, PhoneModule o ZipcodeModule, la conversación es sobre el contrato, no sobre una excepción local.

Cobertura

Los umbrales están en vitest.config.ts y no pueden bajar. No son iguales para las cuatro métricas:

métrica umbral
líneas 94%
statements 94%
funciones 98%
ramas 90%
npm run test:coverage

Cubrí siempre los tres casos defensivos de cada función pública, además de los casos felices:

expect(cpf.format('')).toBe('')
expect(cpf.validate(null as unknown as string)).toBe(false)
expect(cpf.strip(undefined as unknown as string)).toBe('')

Commits

Conventional Commits, en español, describiendo el efecto y no el cambio.

feat(uy): agrega validación de RUT uruguayo
fix(br): corrige la máscara de CPF con entradas parciales
docs(wiki): documenta la auto-escala de medidas
chore(deps): actualiza vitest a 4.x

El mensaje dice qué cambia para quien usa la librería. fix(br): corrige el índice del loop describe el diff; fix(br): corrige la máscara de CPF con entradas parciales describe el efecto.

Reportar un bug

Abrí un issue con:

  • el país y el módulo, por ejemplo cl.rut.validate
  • el valor de entrada exacto
  • lo que devuelve y lo que esperabas
  • la versión de palta y de Node

Un valor de ejemplo reproducible vale más que cualquier descripción.

Licencia

Al contribuir aceptás que tu código se publique bajo licencia MIT.

Siguiente paso: Agregar un país o Arquitectura.

Clone this wiki locally