jerkjs 2.1.7 → 2.2.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.
Files changed (54) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +201 -4
  3. package/index.js +29 -4
  4. package/lib/core/server.js +328 -27
  5. package/lib/loader/routeLoader.js +148 -117
  6. package/lib/mvc/GenericAdapter.js +136 -0
  7. package/lib/mvc/MariaDBAdapter.js +315 -0
  8. package/lib/mvc/MemoryAdapter.js +269 -0
  9. package/lib/mvc/ModelControllerExample.js +285 -0
  10. package/lib/mvc/controllerBase.js +60 -0
  11. package/lib/mvc/modelBase.js +383 -0
  12. package/lib/mvc/modelManager.js +284 -0
  13. package/lib/mvc/userModel.js +265 -0
  14. package/lib/mvc/viewEngine.js +32 -1
  15. package/lib/utils/mimeType.js +62 -0
  16. package/package.json +5 -3
  17. package/BUG_REPORTE_COMPRESION.txt +0 -72
  18. package/JERK_FRAMEWORK_DIAGRAM.txt +0 -492
  19. package/JERK_FRAMEWORK_DIAGRAM_MERMAID.mmd +0 -124
  20. package/JERK_FRAMEWORK_DOCUMENTATION.md +0 -527
  21. package/LICENSE +0 -201
  22. package/README_EN.md +0 -230
  23. package/README_PT.md +0 -230
  24. package/docs/ARQUITECTURA_ROUTES.md +0 -140
  25. package/docs/EXTENSION_MANUAL.md +0 -955
  26. package/docs/FIREWALL_MANUAL.md +0 -416
  27. package/docs/HOOK-2.0.md +0 -512
  28. package/docs/HOOKS_REFERENCE_IMPROVED.md +0 -596
  29. package/docs/MANUAL_API_SDK.md +0 -536
  30. package/docs/MARIADB_TOKENS_IMPLEMENTATION.md +0 -110
  31. package/docs/MIDDLEWARE_MANUAL.md +0 -518
  32. package/docs/OAUTH2_GOOGLE_MANUAL.md +0 -405
  33. package/docs/ROUTING_WITHOUT_JSON_GUIDE.md +0 -454
  34. package/docs/frontend-and-sessions.md +0 -353
  35. package/docs/guia_inicio_rapido_jerkjs.md +0 -113
  36. package/examples/examples.arj +0 -0
  37. package/standard/CompressionTestController.js +0 -56
  38. package/standard/HealthController.js +0 -16
  39. package/standard/HomeController.js +0 -12
  40. package/standard/ProductController.js +0 -18
  41. package/standard/README.md +0 -47
  42. package/standard/UserController.js +0 -23
  43. package/standard/package.json +0 -22
  44. package/standard/routes.json +0 -65
  45. package/standard/server.js +0 -140
  46. package/standardA/controllers/AuthController.js +0 -82
  47. package/standardA/controllers/HomeController.js +0 -19
  48. package/standardA/controllers/UserController.js +0 -41
  49. package/standardA/server.js +0 -311
  50. package/standardA/views/auth/dashboard.html +0 -51
  51. package/standardA/views/auth/login.html +0 -47
  52. package/standardA/views/index.html +0 -32
  53. package/standardA/views/users/detail.html +0 -28
  54. package/standardA/views/users/list.html +0 -36
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v2.2.0 - 20 de enero de 2026
4
+
5
+ ### Added
6
+ - **Arquitectura completa de modelos (MVC)**: Se ha implementado la capa de modelos para completar el patrón MVC, incluyendo ModelBase, ModelManager y modelos específicos
7
+ - **Sistema de adaptadores de base de datos**: Se ha creado un sistema flexible de adaptadores que permite conectar con diferentes tipos de bases de datos (MariaDB, MySQL, memoria, etc.)
8
+ - **Nuevo adaptador MariaDB**: Se ha implementado un adaptador específico para conexión a bases de datos MariaDB/MySQL
9
+ - **Modelos específicos**: Se han creado modelos específicos para diferentes entidades con métodos especializados para consultas complejas
10
+ - **Integración con sistema de hooks**: Los modelos participan en el sistema de hooks del framework para extensibilidad
11
+ - **Comunicación bidireccional entre modelos y controladores**: Se ha implementado un sistema para que modelos y controladores se comuniquen entre sí
12
+ - **Soporte para consultas avanzadas**: Los modelos incluyen soporte para paginación, filtros, búsqueda global y operaciones CRUD completas
13
+ - **Validación de datos en modelos**: Se ha implementado un sistema de validación de datos específico para cada modelo
14
+
15
+ ### Changed
16
+ - **Actualización de la versión a 2.2.0**: Debido a la implementación significativa de la arquitectura de modelos
17
+ - **Refactorización de componentes existentes**: Se han actualizado controladores y otros componentes para integrarse con la nueva arquitectura de modelos
18
+ - **Mejora en la estructura interna**: La arquitectura ahora sigue completamente el patrón MVC
19
+
20
+ ## v2.1.8 - 20 de enero de 2026
21
+
22
+ ### Added
23
+ - **Soporte completo para rutas estáticas**: Se ha implementado soporte completo para servir archivos estáticos desde rutas definidas en `routes.json` o mediante el método `addRoute()`
24
+ - **Sistema de hooks para rutas estáticas**: Se han añadido múltiples hooks para rastrear el flujo completo de archivos estáticos
25
+ - **Sistema de logging para hooks**: Se ha implementado un sistema de logging que registra todos los eventos de hooks en un archivo
26
+ - **Soporte para layouts en ViewEngine**: Se ha añadido soporte para layouts con placeholder `{{content}}` en el sistema de vistas
27
+ - **Mejoras en el sistema de enrutamiento**: Se han añadido mejoras para reconocer correctamente rutas estáticas como prefijos
28
+
29
+ ### Changed
30
+ - **Actualización de documentación**: Se ha actualizado la documentación para reflejar las nuevas funcionalidades de rutas estáticas
31
+ - **Optimización del sistema de rutas**: Mejora en la lógica de coincidencia de rutas para soportar rutas estáticas como prefijos
32
+
3
33
  ## v2.1.7 - 19 de enero de 2026
4
34
 
5
35
  ### Correcciones
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # JERK Framework v2.1.7
1
+ # JERK Framework v2.2.0
2
2
 
3
3
  ![JERK Framework Logo](jerk.jpg)
4
4
 
@@ -12,6 +12,7 @@ Nuestro Starter Kit en `@standard/server.js` es la forma más rápida de comenza
12
12
  - Sistema de controladores preconfigurado
13
13
  - Middlewares esenciales ya integrados (autenticación, CORS, compresión, firewall, etc.)
14
14
  - Sistema de logging y manejo de errores implementado
15
+ - **NUEVO: Arquitectura completa MVC con modelos y soporte para bases de datos**
15
16
 
16
17
  **Cómo comenzar:**
17
18
  1. Edita el archivo `routes.json` para definir tus rutas y asociarlas a tus controladores
@@ -49,10 +50,61 @@ class HomeController {
49
50
  module.exports = new HomeController();
50
51
  ```
51
52
 
52
- 3. ¡Tu aplicación estará lista para usar!
53
+ 3. ¡Tu aplicación estará listo para usar!
53
54
 
54
55
  El Starter Kit incluye controladores de ejemplo para que puedas ver cómo funciona el sistema.
55
56
 
57
+ ## Ejemplo de Rutas Estáticas
58
+
59
+ Desde la versión 2.1.8, JERK Framework soporta rutas estáticas para servir archivos desde directorios locales:
60
+
61
+ ### En routes.json:
62
+ ```json
63
+ [
64
+ {
65
+ "path": "/static",
66
+ "method": "GET",
67
+ "static": {
68
+ "dir": "./public",
69
+ "index": ["index.html", "index.htm"],
70
+ "cacheControl": "public, max-age=3600"
71
+ }
72
+ },
73
+ {
74
+ "path": "/assets",
75
+ "method": "GET",
76
+ "static": {
77
+ "dir": "./public",
78
+ "index": [],
79
+ "cacheControl": "public, max-age=86400"
80
+ }
81
+ }
82
+ ]
83
+ ```
84
+
85
+ ### Usando addRoute():
86
+ ```javascript
87
+ // Ruta estática para servir archivos desde ./public
88
+ server.addRoute({
89
+ method: 'GET',
90
+ path: '/static',
91
+ static: {
92
+ dir: './public',
93
+ index: ['index.html'],
94
+ cacheControl: 'public, max-age=3600'
95
+ }
96
+ });
97
+
98
+ // Ruta estática para servir archivos JS, CSS e imágenes
99
+ server.addRoute('GET', '/assets', {
100
+ static: {
101
+ dir: './public/assets',
102
+ index: [],
103
+ cacheControl: 'public, max-age=86400'
104
+ }
105
+ });
106
+ ```
107
+
56
108
  Visita nuestra página web: https://jerk.page.gd/
57
109
  Repositorio oficial: https://gitlab.com/bytedogssyndicate1/jerk/
58
110
 
@@ -60,10 +112,10 @@ Repositorio oficial: https://gitlab.com/bytedogssyndicate1/jerk/
60
112
 
61
113
  - **Arquitectura Modular**: Componentes independientes para mayor flexibilidad
62
114
  - **Seguridad Avanzada**: Firewall integrado (WAF) con detección de ataques
63
- - **Sistema de Hooks**: Similar al sistema de WordPress para extensibilidad
115
+ - **Sistema de Hooks**: Similar al sistema de WordPress para extensibility
64
116
  - **Autenticación Flexible**: Soporte para JWT, API Keys, Basic Auth, OAuth2, OpenID Connect
65
117
  - **Almacenamiento de Tokens**: Soporte para memoria, JSON, SQLite y MariaDB
66
- - **Enrutamiento Avanzado**: Soporte para rutas parametrizadas y anidadas
118
+ - **Enrutamiento Avanzado**: Soporte para rutas parametrizadas, anidadas y estáticas
67
119
  - **Soporte para Frontend**: Capacidad de servir contenido HTML y otros tipos de contenido
68
120
  - **Configuración de Content-Type**: Especificación de headers Content-Type en routes.json
69
121
  - **Middlewares Integrados**: CORS, rate limiting, compresión, firewall, etc.
@@ -71,6 +123,9 @@ Repositorio oficial: https://gitlab.com/bytedogssyndicate1/jerk/
71
123
  - **Carga de Rutas**: Definición de rutas desde archivos JSON
72
124
  - **Sistema de Sesiones**: Gestión completa de sesiones con soporte para autenticación
73
125
  - **Motor de Plantillas MVC**: Sistema profesional de vistas con soporte para filtros, helpers y hooks
126
+ - **Arquitectura de Modelos Completa (MVC)**: Capa de modelos para la lógica de negocio y acceso a datos
127
+ - **Sistema de Adaptadores de Base de Datos**: Soporte para múltiples motores de base de datos (MariaDB, MySQL, etc.)
128
+ - **Servicio de Archivos Estáticos**: Soporte para servir archivos desde directorios locales con configuración flexible
74
129
  - **Extensibilidad**: Sistema de hooks y filters para personalización
75
130
 
76
131
  ## Instalación
@@ -226,6 +281,148 @@ Las contribuciones son bienvenidas. Por favor, abre un issue o envía un pull re
226
281
 
227
282
  Apache 2.0
228
283
 
284
+ ## Arquitectura de Modelos (MVC)
285
+
286
+ JERK Framework v2.2.0 introduce una arquitectura completa de modelos que completa el patrón MVC. Los modelos permiten encapsular la lógica de negocio y el acceso a datos en componentes reutilizables.
287
+
288
+ ### Ejemplo de Modelo Simple con MariaDB
289
+
290
+ ```javascript
291
+ const { ModelBase, MariaDBAdapter } = require('jerkjs');
292
+
293
+ // Definir un modelo para usuarios
294
+ class UserModel extends ModelBase {
295
+ constructor(options = {}) {
296
+ super({
297
+ ...options,
298
+ tableName: options.tableName || 'users'
299
+ });
300
+
301
+ // Definir campos del modelo
302
+ this.fields = {
303
+ id: { type: 'integer', primaryKey: true, autoIncrement: true },
304
+ username: { type: 'string', required: true },
305
+ email: { type: 'string', required: true },
306
+ password: { type: 'string', required: true },
307
+ createdAt: { type: 'datetime', default: 'CURRENT_TIMESTAMP' }
308
+ };
309
+ }
310
+
311
+ // Método personalizado para encontrar usuario por email
312
+ async findByEmail(email) {
313
+ return await this.findOne({ email });
314
+ }
315
+
316
+ // Método personalizado para crear usuario con validación
317
+ async createUser(userData) {
318
+ // Validar datos antes de crear
319
+ const validation = this.validate('create', userData);
320
+ if (!validation.isValid) {
321
+ throw new Error(`Validación fallida: ${validation.errors.join(', ')}`);
322
+ }
323
+
324
+ return await this.create(userData);
325
+ }
326
+ }
327
+
328
+ // Configurar el adaptador de MariaDB
329
+ const dbConfig = {
330
+ host: 'localhost',
331
+ user: 'tu_usuario',
332
+ password: 'tu_contraseña',
333
+ database: 'tu_base_de_datos'
334
+ };
335
+
336
+ const mariaDBAdapter = new MariaDBAdapter(dbConfig);
337
+
338
+ // Crear instancia del modelo con el adaptador
339
+ const userModel = new UserModel({
340
+ adapter: mariaDBAdapter,
341
+ tableName: 'users'
342
+ });
343
+
344
+ // Uso del modelo
345
+ async function ejemploUsoModelo() {
346
+ try {
347
+ // Crear un nuevo usuario
348
+ const nuevoUsuario = await userModel.createUser({
349
+ username: 'juan.perez',
350
+ email: 'juan@example.com',
351
+ password: 'contraseña_segura'
352
+ });
353
+
354
+ console.log('Usuario creado:', nuevoUsuario);
355
+
356
+ // Buscar usuario por email
357
+ const usuario = await userModel.findByEmail('juan@example.com');
358
+ console.log('Usuario encontrado:', usuario);
359
+ } catch (error) {
360
+ console.error('Error:', error.message);
361
+ }
362
+ }
363
+ ```
364
+
365
+ ### Uso de Modelos en Controladores con loadModel
366
+
367
+ JERK Framework proporciona un helper `loadModel` en el ControllerBase para facilitar la carga y uso de modelos en los controladores:
368
+
369
+ ```javascript
370
+ const ControllerBase = require('jerkjs').ControllerBase;
371
+
372
+ class UserController extends ControllerBase {
373
+ constructor() {
374
+ super();
375
+
376
+ // Cargar el modelo de usuario
377
+ this.userModel = this.loadModel('UserModel', {
378
+ // Opciones del modelo
379
+ });
380
+ }
381
+
382
+ async getAllUsers(req, res) {
383
+ try {
384
+ // Usar el modelo para obtener usuarios
385
+ const users = await this.userModel.find({});
386
+
387
+ this.json(res, { success: true, data: users });
388
+ } catch (error) {
389
+ this.json(res, { success: false, error: error.message }, 500);
390
+ }
391
+ }
392
+
393
+ async getUserById(req, res) {
394
+ try {
395
+ const userId = req.params.id;
396
+
397
+ // Usar el modelo para encontrar un usuario específico
398
+ const user = await this.userModel.findOne({ id: userId });
399
+
400
+ if (!user) {
401
+ this.json(res, { success: false, error: 'Usuario no encontrado' }, 404);
402
+ return;
403
+ }
404
+
405
+ this.json(res, { success: true, data: user });
406
+ } catch (error) {
407
+ this.json(res, { success: false, error: error.message }, 500);
408
+ }
409
+ }
410
+
411
+ async createUser(req, res) {
412
+ try {
413
+ // Usar el modelo para crear un nuevo usuario
414
+ const newUser = await this.userModel.createUser(req.body);
415
+
416
+ this.json(res, { success: true, data: newUser }, 201);
417
+ } catch (error) {
418
+ this.json(res, { success: false, error: error.message }, 400);
419
+ }
420
+ }
421
+ }
422
+
423
+ module.exports = new UserController();
424
+ ```
425
+
229
426
  ## Documentación del Framework
230
427
 
231
428
  Para una descripción detallada de la arquitectura y componentes del framework, consulta el archivo [JERK_FRAMEWORK_DOCUMENTATION.md](JERK_FRAMEWORK_DOCUMENTATION.md).
package/index.js CHANGED
@@ -1,8 +1,12 @@
1
1
  /**
2
2
  * Punto de entrada del framework JERK
3
- * JERK Framework v2.1.2
3
+ * JERK Framework 2.1.8
4
4
  */
5
5
 
6
+ // Mostrar mensaje de versión al iniciar
7
+ const packageInfo = require('./package.json');
8
+ console.log(`JERK Framework v${packageInfo.version}`);
9
+
6
10
  const APIServer = require('./lib/core/server');
7
11
  const Router = require('./lib/core/router');
8
12
  const HandlerManager = require('./lib/core/handler');
@@ -33,6 +37,13 @@ const { SessionManager, sessionAuth } = require('./lib/middleware/session');
33
37
  // Componentes MVC
34
38
  const ViewEngine = require('./lib/mvc/viewEngine');
35
39
  const ControllerBase = require('./lib/mvc/controllerBase');
40
+ const ModelBase = require('./lib/mvc/modelBase');
41
+ const ModelManager = require('./lib/mvc/modelManager');
42
+ const UserModel = require('./lib/mvc/userModel');
43
+ const GenericAdapter = require('./lib/mvc/GenericAdapter');
44
+ const MemoryAdapter = require('./lib/mvc/MemoryAdapter');
45
+ const MariaDBAdapter = require('./lib/mvc/MariaDBAdapter');
46
+ const ModelControllerExample = require('./lib/mvc/ModelControllerExample');
36
47
 
37
48
  // Componentes de manejo de errores
38
49
  const { ErrorHandler, ValidationError, AuthenticationError, DatabaseError } = require('./lib/utils/errorHandler');
@@ -77,7 +88,20 @@ module.exports = {
77
88
  ViewEngine,
78
89
  ControllerBase,
79
90
 
80
- // Componentes de manejo de errores (v2.4.0)
91
+ // Componentes de modelo (v2.4.0)
92
+ ModelBase,
93
+ ModelManager,
94
+ UserModel,
95
+
96
+ // Adaptadores de modelo (v2.5.0)
97
+ GenericAdapter,
98
+ MemoryAdapter,
99
+ MariaDBAdapter,
100
+
101
+ // Ejemplo de controlador con modelos (v2.6.0)
102
+ ModelControllerExample,
103
+
104
+ // Componentes de manejo de errores (v2.7.0)
81
105
  ErrorHandler,
82
106
  ValidationError,
83
107
  AuthenticationError,
@@ -88,7 +112,8 @@ module.exports = {
88
112
  module.exports.JERK = APIServer;
89
113
 
90
114
  // Crear instancia global del sistema de hooks
91
- module.exports.hooks = new HookSystem();
115
+ const hooksInstance = new HookSystem();
116
+ module.exports.hooks = hooksInstance;
92
117
 
93
118
  // Disparar hooks de inicio del framework
94
- module.exports.hooks.doAction('framework_init');
119
+ hooksInstance.doAction('framework_init');