# Neura Utils

Biblioteca de utilidades básicas para el lenguaje de programación Neura. Este paquete proporciona funciones comunes y herramientas para facilitar el desarrollo con Neura.

## Instalación

```bash
# Usando el gestor de paquetes de Neura
neura pkg add neura-utils@^0.1.0-alpha.1
```

## Módulos incluidos

### String
Utilidades para manipulación de cadenas de texto:
- `capitalize`: Capitaliza la primera letra de una cadena
- `camelCase`: Convierte una cadena a formato camelCase
- `snakeCase`: Convierte una cadena a formato snake_case

### Validation
Funciones de validación mejoradas con IA:
- `isValidEmail`: Valida direcciones de correo electrónico
- `isValidPhone`: Valida números de teléfono
- `detectSentiment`: Analiza el sentimiento de un texto (positivo, negativo, neutral)

### Format
Funciones de formateo con recarga automática:
- `currency`: Formatea un número como moneda
- `date`: Formatea fechas en diferentes estilos

### Collection
Operaciones comunes para colecciones:
- `groupBy`: Agrupa un array de objetos por una propiedad
- `uniqueBy`: Filtra objetos duplicados basándose en una propiedad

## Características AI-First

Este paquete implementa varias características AI-First de Neura:

### Anotaciones AI
```neura
@ai.optimize("improve accuracy")
fn isValidEmail(email: string) -> boolean {
  // ...
}
```

### Sistema Watch & Reload
El módulo Format utiliza la anotación `@watch.reload` para actualizarse automáticamente cuando cambia:

```neura
@watch.reload
module Format {
  // ...
}
```

### Macros parametrizables
```neura
// Macro para crear validadores personalizados
macro Validator(name, condition) {
  return `
    fn is${name}(value: any) -> boolean {
      return ${condition};
    }
  `;
}
```

## Ejemplo de uso

```neura
import Utils from "neura-utils";

// Utilizar funciones de string
const capitalized = Utils.String.capitalize("neura");  // "Neura"
const snake = Utils.String.snakeCase("neuraProgramming");  // "neura_programming"

// Validación
const isValid = Utils.Validation.isValidEmail("user@example.com");  // true

// Formateo
const price = Utils.Format.currency(1234.56, "EUR");  // "€1,234.56"

// Operaciones de colección
const users = [
  { id: 1, category: "admin" },
  { id: 2, category: "user" },
  { id: 3, category: "admin" }
];
const grouped = Utils.Collection.groupBy(users, "category");
```

## Licencia
MIT
