Core framework compartido entre todos los proyectos Node.js de HuemulSolutions. Incluye logging estructurado, filtros, funciones utilitarias, helpers de PostgreSQL e interfaces base.
| Módulo | Descripción |
|---|---|
HuemulConfig |
Configuración global del framework (inicializar una vez al arrancar) |
HuemulLog |
Logging estructurado con soporte para Azure y Google Cloud |
errorMessages |
Mensajes de error i18n (es / en) |
HuemulFilters |
Generación de cláusulas WHERE tipadas para SQL |
huemul-functions |
Funciones utilitarias (hash, cifrado, fechas, base64, etc.) |
dataTypeToPostgres |
Mapeo de tipos del framework a tipos PostgreSQL |
CloudProviderType, DatabaseType, etc. |
Enums del framework |
Interfaces IHuemulBaseData, IHuemulFilter, etc. |
Contratos base de datos y filtros |
Agrega el archivo .npmrc en la raíz de tu proyecto apuntando al registry de GitHub Packages:
@huemulsolutions:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=YOUR_GITHUB_TOKEN
Luego instala el paquete:
npm install @huemulsolutions/huemul-node-coreLlama a HuemulConfig.configure() al inicio de tu aplicación, antes de cualquier otro uso del framework:
import { HuemulConfig, CloudProviderType } from "@huemulsolutions/huemul-node-core";
HuemulConfig.configure({
appName: process.env.APP_NAME ?? "mi-app",
cloudProvider: process.env.CLOUD_PROVIDER as CloudProviderType ?? CloudProviderType.google,
appVersions: [
{
appName: "mi-app",
appPlatform: "WEB",
appVersion: process.env.APP_WEB_VERSION ?? "0.0.0",
},
],
logger: undefined, // pasa aquí tu logger (Winston, Bunyan, Google Cloud Logging, etc.)
});Una vez configurado, todas las clases del framework (HuemulLog, getHeaderByName, etc.) leen automáticamente desde HuemulConfig.
import { HuemulLog, layerType, errorType } from "@huemulsolutions/huemul-node-core";
enum moduleType {
users = "users",
products = "products",
}
// Crear una instancia por operación
const log = new HuemulLog(layerType.logic, moduleType.users, "getById", "userLogicGetById", "1.0");
// Registrar pasos intermedios
log.setStepName("query-db");
// Finalizar con éxito
return log.finishSuccessfullyForDataLayer([result]);
// Finalizar con error
return log.finishErrorForDataLayer(errorType.dbRecordNotFound, "Usuario no encontrado");import { errorMessages } from "@huemulsolutions/huemul-node-core";
const lang = log.whoIAm.humanLanguage; // "es" o "en"
errorMessages.errorDataDoesntExist(lang, "users", userId);
// es: "El registro no existe"
// en: "Record doesn't exist"
errorMessages.forbidden(lang);
errorMessages.errorDataCantUpdate(lang);
errorMessages.errorLengthGreaterThan(lang, "name", value, 100);import {
CloudProviderType,
DatabaseType,
HuemulEnvironmentType,
UserManagerType,
} from "@huemulsolutions/huemul-node-core";
const provider = CloudProviderType.google; // "google"
const db = DatabaseType.postgres; // "postgres"
const env = HuemulEnvironmentType.PROD; // "PROD"import {
HuemulFilters,
HuemulFilterString,
HuemulFilterNumber,
HuemulFilterOperators,
HuemulColumnClass,
} from "@huemulsolutions/huemul-node-core";
class UserFilters extends HuemulFilters {
name = new HuemulFilterString(HuemulColumnClass.NORMAL);
age = new HuemulFilterNumber(HuemulColumnClass.NORMAL);
id = new HuemulFilterNumber(HuemulColumnClass.PK);
}
const filters = new UserFilters();
filters.name.addFilter("john", HuemulFilterOperators.LIKE);
filters.age.addFilter(18, HuemulFilterOperators.GREATER_THAN_OR_EQUAL);
const sql = filters.getWhereClause();
// where (UPPER("base"."name") LIKE '%JOHN%') AND ("base"."age" >= 18)El paquete se publica automáticamente en GitHub Packages al hacer push de un tag con formato v*. El workflow ejecuta los tests antes de publicar — si algún test falla, la publicación se cancela.
Si es la primera vez que publicas o el tag aún no existe en el repositorio remoto:
git tag v1.0.1
git push origin main --tags# 1. Commiteá tus cambios normalmente
git add .
git commit -m "feat: algo nuevo"
# 2. Bump de versión (elige uno)
npm version patch # 1.0.1 → 1.0.2
npm version minor # 1.0.1 → 1.1.0
npm version major # 1.0.1 → 2.0.0
# 3. Push del commit + tag en un solo comando
git push origin main --tagsnpm version actualiza package.json, crea el commit y el tag automáticamente. El push dispara el workflow.
npm login --registry=https://npm.pkg.github.com --scope=@huemulsolutions
npm run build
npm publish# Instalar dependencias
npm install
# Compilar
npm run build
# Compilar en modo watch
npm run watch
# Ejecutar tests
npm test
# Tests en modo interactivo
npm run test:watch
# Reporte de cobertura
npm run test:coveragePara probar el paquete localmente en otro proyecto antes de publicar:
# En este repositorio
npm link
# En el proyecto consumidor
npm link @huemulsolutions/huemul-node-core