npm package: @linkiez/jcm-library
Description: Biblioteca JCM para modelos e utilitários compartilhados.
Author: linkiez
Latest version: 4.1.0

# @linkiez/jcm-library

[![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)
[![npm version](https://img.shields.io/npm/v/@linkiez/jcm-library.svg)](https://www.npmjs.com/package/@linkiez/jcm-library)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

Biblioteca compartilhada JCM contendo modelos, interfaces e utilitários para os projetos JCMfront2 e JCMserver3.

## Instalação

### Via GitHub (Recomendado para desenvolvimento)

```bash
npm install linkiez/JCMlibrary#v1.0.0
# ou
yarn add linkiez/JCMlibrary#v1.0.0
```

### Via NPM (quando publicado)

```bash
npm install @linkiez/jcm-library
# ou
yarn add @linkiez/jcm-library
```

## Uso

```typescript
import {
  Produto,
  IProduto,
  Usuario,
  IUsuario,
  AcaoDisposicao,
} from "@linkiez/jcm-library";

// Usando interfaces
const produto: IProduto = {
  id: 1,
  nome: "Produto Exemplo",
  // ... outras propriedades
};

// Usando classes
const produtoModel = new Produto(produto);

// Usando enums
const acao = AcaoDisposicao.APROVADO;
```

## Estrutura

- **Models**: Classes de modelo para entidades
- **Interfaces**: Definições de tipos TypeScript
- **Enums**: Enumerações compartilhadas

## Desenvolvimento

```bash
# Instalar dependências
yarn install

# Build
yarn build

# Testes
yarn test

# Lint
yarn lint
```

## Versionamento e Releases

Este projeto usa [semantic-release](https://github.com/semantic-release/semantic-release) para versionamento automático e publicação de pacotes. Releases são criadas automaticamente com base nas mensagens de commit seguindo a [Convenção de Commits Angular](https://github.com/angular/angular/blob/main/contributing-docs/commit-message-guidelines.md).

### Convenção de Commits

Use os seguintes prefixos nas mensagens de commit:

- `feat:` Nova funcionalidade (gera versão **minor**)
- `fix:` Correção de bug (gera versão **patch**)
- `docs:` Mudanças na documentação
- `style:` Formatação, ponto e vírgula faltando, etc
- `refactor:` Refatoração de código (gera versão **patch**)
- `perf:` Melhoria de performance (gera versão **patch**)
- `test:` Adição de testes
- `build:` Mudanças no build ou dependências
- `ci:` Mudanças em CI/CD
- `chore:` Outras mudanças
- `revert:` Reverter commit anterior

#### Breaking Changes

Para indicar mudanças incompatíveis (versão **major**), adicione `BREAKING CHANGE:` no rodapé do commit:

```bash
feat: adicionar nova API de validação

BREAKING CHANGE: A função validateProduct agora retorna Promise em vez de valor síncrono
```

#### Exemplos

```bash
# Patch release (3.3.4 -> 3.3.5)
git commit -m "fix: corrigir validação de CPF"

# Minor release (3.3.4 -> 3.4.0)
git commit -m "feat: adicionar novo modelo de Nota Fiscal"

# Major release (3.3.4 -> 4.0.0)
git commit -m "feat: refatorar API de produtos

BREAKING CHANGE: Removido suporte para formato legado de produtos"
```

### Como funciona

1. Faça commits seguindo a convenção acima
2. Faça push para a branch `main`
3. O GitHub Actions executa automaticamente:
   - Análise dos commits para determinar a versão
   - Atualização do `CHANGELOG.md`
   - Criação de uma nova tag Git
   - Publicação do pacote no NPM
   - Criação de um GitHub Release

### Validação de Commits

O projeto usa [commitlint](https://commitlint.js.org/) para validar mensagens de commit. Se você tentar fazer um commit com formato inválido, ele será rejeitado:

```bash
# ❌ Inválido
git commit -m "atualizar documentação"

# ✅ Válido
git commit -m "docs: atualizar documentação"
```

## Licença

MIT