agent-ctx 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -51
- package/dist/commands/add.d.ts +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +1 -1
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/centralize.d.ts +3 -3
- package/dist/commands/centralize.d.ts.map +1 -1
- package/dist/commands/centralize.js +21 -21
- package/dist/commands/centralize.js.map +1 -1
- package/dist/commands/clean.d.ts +3 -3
- package/dist/commands/clean.d.ts.map +1 -1
- package/dist/commands/clean.js +31 -31
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +132 -50
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +97 -38
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/update.d.ts +3 -4
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +169 -52
- package/dist/commands/update.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -12
- package/dist/index.js.map +1 -1
- package/dist/lib/bridges.d.ts +8 -8
- package/dist/lib/bridges.d.ts.map +1 -1
- package/dist/lib/bridges.js +108 -108
- package/dist/lib/bridges.js.map +1 -1
- package/dist/lib/config.d.ts +18 -6
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +54 -18
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/i18n.d.ts.map +1 -1
- package/dist/lib/i18n.js +56 -6
- package/dist/lib/i18n.js.map +1 -1
- package/dist/lib/logger.d.ts +7 -7
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +17 -17
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/templates.d.ts +1 -5
- package/dist/lib/templates.d.ts.map +1 -1
- package/dist/lib/templates.js +28 -18
- package/dist/lib/templates.js.map +1 -1
- package/dist/lib/utils.d.ts +8 -8
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +49 -21
- package/dist/lib/utils.js.map +1 -1
- package/package.json +77 -63
- package/src/templates/en/skills/skill-agents.md +43 -18
- package/src/templates/en/skills/skill-memory.md +97 -0
- package/src/templates/es/skills/skill-agents.md +43 -18
- package/src/templates/es/skills/skill-memory.md +97 -0
- package/dist/bin/agentrc.d.ts +0 -7
- package/dist/bin/agentrc.d.ts.map +0 -1
- package/dist/bin/agentrc.js +0 -8
- package/dist/bin/agentrc.js.map +0 -1
- package/dist/lib/wizard.d.ts +0 -22
- package/dist/lib/wizard.d.ts.map +0 -1
- package/dist/lib/wizard.js +0 -197
- package/dist/lib/wizard.js.map +0 -1
- package/src/templates/en/skills/skill-api.md +0 -117
- package/src/templates/en/skills/skill-git.md +0 -109
- package/src/templates/en/skills/skill-react.md +0 -94
- package/src/templates/en/skills/skill-testing.md +0 -139
- package/src/templates/es/skills/skill-api.md +0 -117
- package/src/templates/es/skills/skill-git.md +0 -108
- package/src/templates/es/skills/skill-react.md +0 -94
- package/src/templates/es/skills/skill-testing.md +0 -139
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: api-design
|
|
3
|
-
description: Diseña APIs REST con patrones consistentes, códigos HTTP apropiados y validación. Usar cuando se crean endpoints, manejo de errores o versionado de APIs.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# API Design
|
|
7
|
-
|
|
8
|
-
Patrones y mejores prácticas para diseñar APIs REST.
|
|
9
|
-
|
|
10
|
-
## Cuándo usar
|
|
11
|
-
|
|
12
|
-
- Diseñar endpoints REST
|
|
13
|
-
- Manejar errores de forma consistente
|
|
14
|
-
- Versionado de APIs
|
|
15
|
-
- Validación de requests
|
|
16
|
-
|
|
17
|
-
## Convenciones REST
|
|
18
|
-
|
|
19
|
-
### Estructura de URLs
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
GET /api/v1/users # Listar usuarios
|
|
23
|
-
GET /api/v1/users/:id # Obtener usuario
|
|
24
|
-
POST /api/v1/users # Crear usuario
|
|
25
|
-
PUT /api/v1/users/:id # Actualizar completo
|
|
26
|
-
PATCH /api/v1/users/:id # Actualizar parcial
|
|
27
|
-
DELETE /api/v1/users/:id # Eliminar usuario
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
### Query Parameters
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
GET /api/v1/users?
|
|
34
|
-
page=1& # Paginación
|
|
35
|
-
limit=20& # Items por página
|
|
36
|
-
sort=createdAt:desc& # Ordenamiento
|
|
37
|
-
filter[status]=active # Filtros
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Respuestas Estándar
|
|
41
|
-
|
|
42
|
-
### Éxito (200, 201)
|
|
43
|
-
|
|
44
|
-
```json
|
|
45
|
-
{
|
|
46
|
-
"success": true,
|
|
47
|
-
"data": { "id": "123", "name": "John Doe" },
|
|
48
|
-
"meta": { "page": 1, "total": 100 }
|
|
49
|
-
}
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Error (400, 404, 500)
|
|
53
|
-
|
|
54
|
-
```json
|
|
55
|
-
{
|
|
56
|
-
"success": false,
|
|
57
|
-
"error": {
|
|
58
|
-
"code": "VALIDATION_ERROR",
|
|
59
|
-
"message": "Email is required",
|
|
60
|
-
"details": [{ "field": "email", "message": "Required" }]
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## Códigos HTTP
|
|
66
|
-
|
|
67
|
-
| Código | Significado | Uso |
|
|
68
|
-
|--------|-------------|-----|
|
|
69
|
-
| 200 | OK | GET, PUT/PATCH exitoso |
|
|
70
|
-
| 201 | Created | POST exitoso |
|
|
71
|
-
| 204 | No Content | DELETE exitoso |
|
|
72
|
-
| 400 | Bad Request | Validación fallida |
|
|
73
|
-
| 401 | Unauthorized | No autenticado |
|
|
74
|
-
| 403 | Forbidden | Sin permisos |
|
|
75
|
-
| 404 | Not Found | Recurso no existe |
|
|
76
|
-
| 500 | Server Error | Error interno |
|
|
77
|
-
|
|
78
|
-
## Ejemplo de Validación
|
|
79
|
-
|
|
80
|
-
```typescript
|
|
81
|
-
import { z } from 'zod';
|
|
82
|
-
|
|
83
|
-
const userSchema = z.object({
|
|
84
|
-
email: z.string().email(),
|
|
85
|
-
name: z.string().min(2),
|
|
86
|
-
role: z.enum(['admin', 'user'])
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
export function validate(schema: z.ZodSchema) {
|
|
90
|
-
return (req, res, next) => {
|
|
91
|
-
const result = schema.safeParse(req.body);
|
|
92
|
-
if (!result.success) {
|
|
93
|
-
return res.status(400).json({
|
|
94
|
-
success: false,
|
|
95
|
-
error: { code: 'VALIDATION_ERROR', details: result.error.issues }
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
req.body = result.data;
|
|
99
|
-
next();
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## Mejores prácticas
|
|
105
|
-
|
|
106
|
-
### ✅ Hacer
|
|
107
|
-
|
|
108
|
-
- Usar HTTPS siempre
|
|
109
|
-
- Versionado en URL (`/api/v1/`)
|
|
110
|
-
- Rate limiting
|
|
111
|
-
- Respuestas consistentes
|
|
112
|
-
|
|
113
|
-
### ❌ Evitar
|
|
114
|
-
|
|
115
|
-
- Verbos en URLs (`/getUsers`, `/deleteUser`)
|
|
116
|
-
- Exponer IDs internos
|
|
117
|
-
- Respuestas sin formato estándar
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: git-workflow
|
|
3
|
-
description: Convenciones Git, estrategias de branching y formato de commits. Usar cuando se crean commits, branches, PRs o se resuelven conflictos.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Git Workflow
|
|
7
|
-
|
|
8
|
-
Convenciones Git, commits y patrones de flujo de trabajo.
|
|
9
|
-
|
|
10
|
-
## Cuándo usar
|
|
11
|
-
|
|
12
|
-
- Escribir mensajes de commit
|
|
13
|
-
- Crear feature branches
|
|
14
|
-
- Gestionar pull requests
|
|
15
|
-
- Resolver conflictos o hacer rebase
|
|
16
|
-
|
|
17
|
-
## Commits (Conventional Commits)
|
|
18
|
-
|
|
19
|
-
### Formato
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
<type>(<scope>): <description>
|
|
23
|
-
|
|
24
|
-
[cuerpo opcional]
|
|
25
|
-
|
|
26
|
-
[footer opcional]
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### Tipos
|
|
30
|
-
|
|
31
|
-
| Tipo | Descripción |
|
|
32
|
-
|------|-------------|
|
|
33
|
-
| `feat` | Nueva funcionalidad |
|
|
34
|
-
| `fix` | Corrección de bug |
|
|
35
|
-
| `docs` | Solo documentación |
|
|
36
|
-
| `style` | Formato (sin cambio de código) |
|
|
37
|
-
| `refactor` | Refactorización |
|
|
38
|
-
| `test` | Añadir/modificar tests |
|
|
39
|
-
| `chore` | Mantenimiento, deps |
|
|
40
|
-
| `perf` | Mejora de rendimiento |
|
|
41
|
-
|
|
42
|
-
### Ejemplos
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
feat(auth): añadir login con Google OAuth
|
|
46
|
-
fix(api): manejar respuesta null en fetch de usuario
|
|
47
|
-
docs: actualizar guía de instalación
|
|
48
|
-
|
|
49
|
-
# Breaking change
|
|
50
|
-
feat(api)!: cambiar formato de respuesta
|
|
51
|
-
|
|
52
|
-
BREAKING CHANGE: Response ahora devuelve datos en `result` en vez de `data`
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Estrategia de Branching (Git Flow)
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
main (producción)
|
|
59
|
-
│
|
|
60
|
-
└── develop (desarrollo)
|
|
61
|
-
│
|
|
62
|
-
├── feature/nueva-funcionalidad
|
|
63
|
-
├── bugfix/corregir-bug
|
|
64
|
-
└── release/v1.2.0
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
### Crear Feature Branch
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
git checkout develop
|
|
71
|
-
git pull origin develop
|
|
72
|
-
git checkout -b feature/nombre-descriptivo
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
## Comandos Útiles
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
# Stash
|
|
79
|
-
git stash # Guardar cambios
|
|
80
|
-
git stash pop # Restaurar cambios
|
|
81
|
-
|
|
82
|
-
# Rebase interactivo
|
|
83
|
-
git rebase -i HEAD~3 # Últimos 3 commits
|
|
84
|
-
|
|
85
|
-
# Cherry Pick
|
|
86
|
-
git cherry-pick abc123 # Aplicar commit específico
|
|
87
|
-
|
|
88
|
-
# Bisect (encontrar bug)
|
|
89
|
-
git bisect start
|
|
90
|
-
git bisect bad # Commit actual tiene bug
|
|
91
|
-
git bisect good abc123 # Commit bueno conocido
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Mejores prácticas
|
|
95
|
-
|
|
96
|
-
### ✅ Hacer
|
|
97
|
-
|
|
98
|
-
- Commits atómicos (un cambio lógico por commit)
|
|
99
|
-
- PRs pequeños y enfocados
|
|
100
|
-
- Rebase antes de merge
|
|
101
|
-
- Squash commits WIP
|
|
102
|
-
|
|
103
|
-
### ❌ Evitar
|
|
104
|
-
|
|
105
|
-
- Commits con solo "fix" o "update"
|
|
106
|
-
- PRs gigantes (>500 líneas)
|
|
107
|
-
- Force push a branches compartidas
|
|
108
|
-
- Mezclar refactors con features
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: react-patterns
|
|
3
|
-
description: Patrones de componentes React, hooks y mejores prácticas con TypeScript. Usar cuando se crean componentes, custom hooks u optimización de renderizado.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# React Patterns
|
|
7
|
-
|
|
8
|
-
Patrones y mejores prácticas para desarrollo React.
|
|
9
|
-
|
|
10
|
-
## Cuándo usar
|
|
11
|
-
|
|
12
|
-
- Crear componentes reutilizables
|
|
13
|
-
- Manejar estado complejo
|
|
14
|
-
- Optimizar rendimiento de renderizado
|
|
15
|
-
- Construir custom hooks
|
|
16
|
-
|
|
17
|
-
## Patrones de Componentes
|
|
18
|
-
|
|
19
|
-
### Componente Funcional con Props Tipadas
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
interface ButtonProps {
|
|
23
|
-
variant: 'primary' | 'secondary';
|
|
24
|
-
children: React.ReactNode;
|
|
25
|
-
onClick?: () => void;
|
|
26
|
-
disabled?: boolean;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function Button({ variant, children, onClick, disabled }: ButtonProps) {
|
|
30
|
-
return (
|
|
31
|
-
<button
|
|
32
|
-
className={`btn btn-${variant}`}
|
|
33
|
-
onClick={onClick}
|
|
34
|
-
disabled={disabled}
|
|
35
|
-
>
|
|
36
|
-
{children}
|
|
37
|
-
</button>
|
|
38
|
-
);
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Custom Hook
|
|
43
|
-
|
|
44
|
-
```tsx
|
|
45
|
-
function useToggle(initialValue = false) {
|
|
46
|
-
const [value, setValue] = useState(initialValue);
|
|
47
|
-
|
|
48
|
-
const toggle = useCallback(() => setValue(v => !v), []);
|
|
49
|
-
const setTrue = useCallback(() => setValue(true), []);
|
|
50
|
-
const setFalse = useCallback(() => setValue(false), []);
|
|
51
|
-
|
|
52
|
-
return { value, toggle, setTrue, setFalse };
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
### Compound Components
|
|
57
|
-
|
|
58
|
-
```tsx
|
|
59
|
-
const Card = ({ children }) => <div className="card">{children}</div>;
|
|
60
|
-
Card.Header = ({ children }) => <div className="card-header">{children}</div>;
|
|
61
|
-
Card.Body = ({ children }) => <div className="card-body">{children}</div>;
|
|
62
|
-
|
|
63
|
-
// Uso:
|
|
64
|
-
<Card>
|
|
65
|
-
<Card.Header>Título</Card.Header>
|
|
66
|
-
<Card.Body>Contenido</Card.Body>
|
|
67
|
-
</Card>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Estructura de Directorios
|
|
71
|
-
|
|
72
|
-
```
|
|
73
|
-
components/
|
|
74
|
-
├── ui/ # Componentes base (Button, Input, Modal)
|
|
75
|
-
├── features/ # Componentes específicos de features
|
|
76
|
-
├── layouts/ # Layouts y wrappers
|
|
77
|
-
└── hooks/ # Custom hooks reutilizables
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
## Mejores prácticas
|
|
81
|
-
|
|
82
|
-
### ✅ Hacer
|
|
83
|
-
|
|
84
|
-
- Usar `useMemo` y `useCallback` para optimización
|
|
85
|
-
- Tipar todas las props con TypeScript
|
|
86
|
-
- Extraer lógica a custom hooks
|
|
87
|
-
- Composición sobre herencia
|
|
88
|
-
|
|
89
|
-
### ❌ Evitar
|
|
90
|
-
|
|
91
|
-
- Props drilling excesivo (usar Context)
|
|
92
|
-
- useEffect sin dependencias correctas
|
|
93
|
-
- Estado en el componente incorrecto
|
|
94
|
-
- Listas sin `key`
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: testing-practices
|
|
3
|
-
description: Estrategias de testing, patrones y mejores prácticas con Jest/Vitest. Usar cuando se escriben unit tests, integration tests o mocking de dependencias.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Testing Practices
|
|
7
|
-
|
|
8
|
-
Estrategias y patrones para testing efectivo.
|
|
9
|
-
|
|
10
|
-
## Cuándo usar
|
|
11
|
-
|
|
12
|
-
- Escribir unit tests
|
|
13
|
-
- Crear integration tests
|
|
14
|
-
- Mockear dependencias
|
|
15
|
-
- Testear componentes React
|
|
16
|
-
|
|
17
|
-
## Pirámide de Testing
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
/\
|
|
21
|
-
/ \ E2E Tests (Playwright, Cypress)
|
|
22
|
-
/----\
|
|
23
|
-
/ \ Integration Tests
|
|
24
|
-
/--------\
|
|
25
|
-
/ \ Unit Tests
|
|
26
|
-
/____________\
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Unit Tests (Vitest)
|
|
30
|
-
|
|
31
|
-
### Test Básico
|
|
32
|
-
|
|
33
|
-
```typescript
|
|
34
|
-
import { describe, it, expect } from 'vitest';
|
|
35
|
-
import { sum } from './sum';
|
|
36
|
-
|
|
37
|
-
describe('sum', () => {
|
|
38
|
-
it('debería sumar dos números positivos', () => {
|
|
39
|
-
expect(sum(1, 2)).toBe(3);
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
it('debería manejar números negativos', () => {
|
|
43
|
-
expect(sum(-1, 1)).toBe(0);
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Test con Setup/Teardown
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
describe('UserService', () => {
|
|
52
|
-
let service: UserService;
|
|
53
|
-
|
|
54
|
-
beforeEach(() => {
|
|
55
|
-
service = new UserService();
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
afterEach(() => {
|
|
59
|
-
vi.clearAllMocks();
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it('debería crear un usuario', async () => {
|
|
63
|
-
const user = await service.create({ name: 'Test' });
|
|
64
|
-
expect(user.id).toBeDefined();
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
## Mocking
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
// Mock de módulo
|
|
73
|
-
vi.mock('./database', () => ({
|
|
74
|
-
query: vi.fn().mockResolvedValue([{ id: 1, name: 'Test' }])
|
|
75
|
-
}));
|
|
76
|
-
|
|
77
|
-
// Mock de función
|
|
78
|
-
const mockFetch = vi.fn().mockResolvedValue({
|
|
79
|
-
json: () => Promise.resolve({ data: 'test' })
|
|
80
|
-
});
|
|
81
|
-
|
|
82
|
-
// Spy
|
|
83
|
-
const spy = vi.spyOn(console, 'log');
|
|
84
|
-
myFunction();
|
|
85
|
-
expect(spy).toHaveBeenCalledWith('mensaje esperado');
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## React Testing Library
|
|
89
|
-
|
|
90
|
-
```typescript
|
|
91
|
-
import { render, screen, fireEvent } from '@testing-library/react';
|
|
92
|
-
|
|
93
|
-
test('debería mostrar e interactuar con botón', async () => {
|
|
94
|
-
const handleClick = vi.fn();
|
|
95
|
-
render(<Button onClick={handleClick}>Click me</Button>);
|
|
96
|
-
|
|
97
|
-
const button = screen.getByRole('button', { name: /click me/i });
|
|
98
|
-
expect(button).toBeInTheDocument();
|
|
99
|
-
|
|
100
|
-
await fireEvent.click(button);
|
|
101
|
-
expect(handleClick).toHaveBeenCalledTimes(1);
|
|
102
|
-
});
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
## Estructura de Tests
|
|
106
|
-
|
|
107
|
-
```
|
|
108
|
-
__tests__/
|
|
109
|
-
├── unit/
|
|
110
|
-
│ ├── services/
|
|
111
|
-
│ └── utils/
|
|
112
|
-
├── integration/
|
|
113
|
-
│ └── api/
|
|
114
|
-
└── e2e/
|
|
115
|
-
└── flows/
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Mejores prácticas
|
|
119
|
-
|
|
120
|
-
### ✅ Hacer
|
|
121
|
-
|
|
122
|
-
- Una aserción por test (cuando sea posible)
|
|
123
|
-
- Nombres descriptivos: `debería_X_cuando_Y`
|
|
124
|
-
- Arrange-Act-Assert (AAA)
|
|
125
|
-
- Tests independientes
|
|
126
|
-
|
|
127
|
-
### ❌ Evitar
|
|
128
|
-
|
|
129
|
-
- Tests que dependen del orden
|
|
130
|
-
- Lógica en tests
|
|
131
|
-
- Tests flaky (intermitentes)
|
|
132
|
-
- Mockear todo indiscriminadamente
|
|
133
|
-
|
|
134
|
-
## Cobertura Recomendada
|
|
135
|
-
|
|
136
|
-
- Statements: 80%
|
|
137
|
-
- Branches: 75%
|
|
138
|
-
- Functions: 80%
|
|
139
|
-
- Lines: 80%
|