jerkjs 2.5.4 → 2.5.8

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 (69) hide show
  1. package/BENCHMARK_RESULTS.md +60 -0
  2. package/CHANGELOG.md +43 -0
  3. package/ESTADISTICAS_RENDIMIENTO.md +106 -0
  4. package/README.md +142 -423
  5. package/README_LEGACY.md +513 -0
  6. package/debug_hook.js +11 -0
  7. package/doc-2.5/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
  8. package/doc-2.5/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
  9. package/doc-2.5/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
  10. package/doc-2.5/CACHE_SYSTEM_MAP.md +206 -0
  11. package/doc-2.5/SESSION_SECURITY_FLAGS.md +174 -0
  12. package/doc-2.5/an/303/241lisis-completo-jerk-framework.md +213 -0
  13. package/docs/CACHE_SYSTEM_MAP.md +206 -0
  14. package/docs/SERVER_OPTIMIZATION_NOTES.md +87 -0
  15. package/index.js +7 -1
  16. package/jerk2.5.webp +0 -0
  17. package/lib/admin/AdminExtension.js +436 -0
  18. package/lib/admin/ModuleLoader.js +77 -0
  19. package/lib/admin/config.js +21 -0
  20. package/lib/admin/modules/CacheModule.js +145 -0
  21. package/lib/admin/modules/STATS_MODULE_README.md +98 -0
  22. package/lib/admin/modules/StatsModule.js +140 -0
  23. package/lib/admin/modules/SystemModule.js +140 -0
  24. package/lib/admin/modules/TimeModule.js +95 -0
  25. package/lib/cache/CacheHooks.js +141 -0
  26. package/lib/core/server.js +199 -46
  27. package/lib/middleware/session.js +11 -3
  28. package/lib/mvc/viewEngine.js +26 -1
  29. package/lib/router/RouteMatcher.js +242 -54
  30. package/lib/utils/globalStats.js +16 -0
  31. package/package.json +2 -2
  32. package/@qaLoadModel/controllers/ProductController.js +0 -143
  33. package/@qaLoadModel/controllers/UserController.js +0 -143
  34. package/@qaLoadModel/models/ProductModel.js +0 -41
  35. package/@qaLoadModel/models/UserModel.js +0 -41
  36. package/@qaLoadModel/package.json +0 -22
  37. package/@qaLoadModel/qa_report.md +0 -71
  38. package/@qaLoadModel/results.md +0 -97
  39. package/@qaLoadModel/routes.json +0 -58
  40. package/@qaLoadModel/server.js +0 -43
  41. package/@qaLoadModel/simple-test.js +0 -96
  42. package/@qaLoadModel/test-models.js +0 -144
  43. package/@qaLoadModel/test_endpoints.sh +0 -35
  44. package/@qaLoadModel/test_final.js +0 -89
  45. package/@qaLoadModel/views/products/index.html +0 -45
  46. package/@qaLoadModel/views/products/show.html +0 -27
  47. package/@qaLoadModel/views/users/index.html +0 -44
  48. package/@qaLoadModel/views/users/show.html +0 -26
  49. package/qa/INFORME_QA_JERKJS_ROUTING.md +0 -108
  50. package/qa/informe_qa_fix_enrutamiento.md +0 -93
  51. package/qa-app/controllers/homeController.js +0 -9
  52. package/qa-app/controllers/userController.js +0 -76
  53. package/qa-app/hooks-config.js +0 -65
  54. package/qa-app/models/UserModel.js +0 -36
  55. package/qa-app/package-lock.json +0 -1683
  56. package/qa-app/package.json +0 -25
  57. package/qa-app/public/css/style.css +0 -15
  58. package/qa-app/public/images/logo.png +0 -3
  59. package/qa-app/public/index.html +0 -15
  60. package/qa-app/public/js/main.js +0 -7
  61. package/qa-app/routes/api-routes.json +0 -23
  62. package/qa-app/routes/page-routes.json +0 -16
  63. package/qa-app/routes/static-routes.json +0 -20
  64. package/qa-app/server.js +0 -68
  65. package/qa-app/views/footer.html +0 -3
  66. package/qa-app/views/index.html +0 -20
  67. package/qa-app/views/users.html +0 -20
  68. package/utils/find_file_path.sh +0 -36
  69. /package/{doc2.5.3 → doc-2.5}/manual-mvc-completo.md +0 -0
package/README.md CHANGED
@@ -1,217 +1,99 @@
1
- # JERK Framework v2.5.4
2
-
3
- ![JERK Framework Logo](jerk.webp)
4
-
5
- **¿Nuevo en JERK? Comienza tu proyecto rápidamente con nuestro Starter Kit**
6
-
7
- Nuestro Starter Kit en `standard/server.js` es la forma más rápida de comenzar con JERK. Viene con todas las funcionalidades del framework ya configuradas, permitiéndote concentrarte en desarrollar tu aplicación en lugar de configurar infraestructura.
8
-
9
- **Características del Starter Kit:**
10
- - Configuración lista para usar con todos los componentes principales
11
- - Carga de rutas desde archivo JSON (`routes.json`)
12
- - Sistema de controladores preconfigurado
13
- - Middlewares esenciales ya integrados (autenticación, CORS, compresión, firewall, etc.)
14
- - Sistema de logging y manejo de errores implementado
15
- - **NUEVO: Arquitectura completa MVC con modelos y soporte para bases de datos**
16
- - **NUEVO: Compatible con qbuilderjs para consultas SQL seguras y eficientes**
17
-
18
- **Cómo comenzar:**
19
- 1. Edita el archivo `routes.json` para definir tus rutas y asociarlas a tus controladores
20
-
21
- Ejemplo básico de `routes.json`:
22
- ```json
23
- [
24
- {
25
- "path": "/",
26
- "method": "GET",
27
- "controller": "HomeController",
28
- "handler": "index",
29
- "contentType": "text/html"
30
- },
31
- {
32
- "path": "/api/users",
33
- "method": "GET",
34
- "controller": "UserController",
35
- "handler": "getAllUsers",
36
- "contentType": "application/json"
37
- }
38
- ]
39
- ```
1
+ ![JERK Framework](jerk2.5.webp)
2
+ ##### JERK Framework v2.5.8
40
3
 
41
- 2. Crea tus controladores según las rutas definidas
4
+ **JERK Framework** es un framework de desarrollo web completo para Node.js que implementa una arquitectura MVC (Modelo-Vista-Controlador) con soporte para APIs REST, seguridad avanzada, y sistemas de plantillas.
42
5
 
43
- Por ejemplo, para la ruta principal "/", crea un archivo `HomeController.js`:
44
- ```javascript
45
- class HomeController {
46
- index(req, res) {
47
- res.render('index.html', { data: 'Hola' });
48
- }
49
- }
6
+ ## 🚀 ¡Novedad! Optimización de Rendimiento del Sistema de Enrutamiento
50
7
 
51
- module.exports = new HomeController();
52
- ```
8
+ **JERK Framework v2.5.7** incluye una optimización del sistema de enrutamiento que mejora drásticamente el rendimiento:
53
9
 
54
- 3. ¡Tu aplicación estará listo para usar!
10
+ - **Organización por aridad**: Rutas organizadas por número de segmentos para descartar rápidamente candidatos inválidos
11
+ - **Índices por primer segmento**: "Prefix hints" para filtrar rápidamente rutas candidatas
12
+ - **Reducción del espacio de búsqueda**: Disminución drástica del número de expresiones regulares evaluadas
13
+ - **Resultados impresionantes**: Aumento del rendimiento de 380 a 529+ RPS (39% de mejora) en pruebas con 15,000 solicitudes concurrentes
55
14
 
56
- El Starter Kit incluye controladores de ejemplo para que puedas ver cómo funciona el sistema.
15
+ Esta optimización permite al framework alcanzar más de 500 solicitudes por segundo en hardware modesto, como un procesador Celeron, gracias a la implementación de buckets de rutas basados en la profundidad de la ruta (número de segmentos) y el primer segmento.
57
16
 
58
- ## Ejemplo de Rutas Estáticas
17
+ ## 🔧 Extensión de Administración
59
18
 
60
- Desde la versión 2.1.8, JERK Framework soporta rutas estáticas para servir archivos desde directorios locales:
19
+ JERK Framework v2.5.7 incluye una extensión de administración que proporciona:
61
20
 
62
- ### En routes.json:
63
- ```json
64
- [
65
- {
66
- "path": "/static",
67
- "method": "GET",
68
- "static": {
69
- "dir": "./public",
70
- "index": ["index.html", "index.htm"],
71
- "cacheControl": "public, max-age=3600"
72
- }
73
- },
74
- {
75
- "path": "/assets",
76
- "method": "GET",
77
- "static": {
78
- "dir": "./public",
79
- "index": [],
80
- "cacheControl": "public, max-age=86400"
81
- }
82
- }
83
- ]
84
- ```
21
+ - **Servidor TCP de administración**: Accesible solo desde localhost para mayor seguridad
22
+ - **Monitoreo en tiempo real**: Visualización de rutas registradas y activas
23
+ - **Sistema de módulos**: Arquitectura extensible para futuras funcionalidades de administración
24
+ - **Integración con hooks**: Sistema de extensibilidad basado en el sistema de hooks del framework
25
+ - **Puerto configurable**: Por defecto en el puerto 9999
26
+ - **Módulo de estadísticas**: Visualización de métricas del servidor en tiempo real
85
27
 
86
- ### Usando addRoute():
87
- ```javascript
88
- // Ruta estática para servir archivos desde ./public
89
- server.addRoute({
90
- method: 'GET',
91
- path: '/static',
92
- static: {
93
- dir: './public',
94
- index: ['index.html'],
95
- cacheControl: 'public, max-age=3600'
96
- }
97
- });
98
-
99
- // Ruta estática para servir archivos JS, CSS e imágenes
100
- server.addRoute('GET', '/assets', {
101
- static: {
102
- dir: './public/assets',
103
- index: [],
104
- cacheControl: 'public, max-age=86400'
105
- }
106
- });
107
- ```
28
+ ### Módulo de Estadísticas
108
29
 
109
- ## Novedades en v2.5.1
30
+ El módulo de estadísticas (disponible desde v2.5.8) proporciona métricas detalladas del servidor:
110
31
 
111
- ### Corrección de rutas estáticas
112
- - **Solución de error crítico con directorios**: Se corrigió un error donde el sistema de rutas estáticas intentaba leer directorios como si fueran archivos, causando el error `EISDIR: illegal operation on a directory, read`. Ahora el sistema verifica explícitamente si una ruta es un directorio y en tal caso busca el archivo índice correspondiente.
32
+ - **Cantidad de requests procesados**: Con visualización de kilobytes transferidos
33
+ - **Cantidad de responses enviadas**: Con visualización de kilobytes transferidos
34
+ - **Accesos a rutas**: Registro de accesos a rutas registradas (input/output)
35
+ - **Endpoints y rutas más accedidas**: Visualización de los endpoints y rutas más utilizados
113
36
 
114
- ## Carga de Rutas desde Múltiples Archivos (v2.5.0)
37
+ ### Comandos disponibles en la extensión de administración:
115
38
 
116
- Desde la versión 2.5.0, JERK Framework incluye el componente `RouteDirectoryLoader` que permite cargar rutas desde múltiples archivos JSON ubicados en un directorio específico. Esta funcionalidad mejora la organización y mantenibilidad de aplicaciones grandes al permitir dividir las rutas en varios archivos en lugar de tener un único archivo `routes.json`.
39
+ - `stats` o `statistics`: Muestra estadísticas generales del servidor
40
+ - `requests`: Muestra estadísticas específicas de solicitudes
41
+ - `endpoints`: Muestra estadísticas de endpoints y rutas más accedidas
42
+ - `routes`: Muestra rutas registradas y activas
43
+ - `time` y `date`: Muestra hora y fecha actual
44
+ - `sysinfo`, `system`, `resources`: Muestra información del sistema
117
45
 
118
- ### Ventajas del RouteDirectoryLoader:
119
- - Organización por funcionalidad (usuarios, autenticación, API, etc.)
120
- - Mayor mantenibilidad en proyectos grandes
121
- - Detección automática de rutas duplicadas
122
- - Mensajes de advertencia coloreados para rutas sobreescritas
123
- - Recarga automática de rutas en desarrollo
124
-
125
- ### Uso del RouteDirectoryLoader:
46
+ ### Uso de la extensión de administración:
126
47
 
127
48
  ```javascript
128
- const { APIServer, RouteDirectoryLoader } = require('jerkjs');
49
+ const { APIServer } = require('jerkjs');
129
50
 
130
51
  const server = new APIServer({ port: 3000 });
131
- const routeDirectoryLoader = new RouteDirectoryLoader();
132
52
 
133
- // Cargar rutas desde un directorio que contiene múltiples archivos JSON
134
- routeDirectoryLoader.loadRoutesFromDirectory(server, './routes')
135
- .then(routes => {
136
- console.log(`${routes.length} rutas cargadas exitosamente`);
137
- server.start();
138
- })
139
- .catch(error => {
140
- console.error('Error cargando rutas desde directorio:', error.message);
141
- });
142
- ```
53
+ // Iniciar la extensión de administración
54
+ server.initializeAdminExtension({
55
+ port: 9999,
56
+ host: '127.0.0.1' // Solo localhost
57
+ });
143
58
 
144
- ### Estructura de directorio recomendada:
145
- ```
146
- routes/
147
- ├── api-routes.json
148
- ├── auth-routes.json
149
- ├── static-routes.json
150
- └── user-routes.json
59
+ server.start();
151
60
  ```
152
61
 
153
- ### Ejemplo de archivo api-routes.json:
154
- ```json
155
- [
156
- {
157
- "path": "/api/users",
158
- "method": "GET",
159
- "controller": "./controllers/userController.js",
160
- "handler": "getAllUsers",
161
- "contentType": "application/json"
162
- },
163
- {
164
- "path": "/api/users/:id",
165
- "method": "GET",
166
- "controller": "./controllers/userController.js",
167
- "handler": "getUserById",
168
- "contentType": "application/json"
169
- }
170
- ]
62
+ Una vez iniciado, puedes conectarte al servidor de administración usando telnet o nc:
63
+ ```bash
64
+ telnet localhost 9999
171
65
  ```
172
66
 
173
- ### Detección de rutas duplicadas:
174
- Cuando el sistema detecta que una ruta ya ha sido definida previamente, muestra mensajes de advertencia:
67
+ ## Características Principales
175
68
 
176
- ```
177
- [RUTA SOBREESCRITA] Archivo: ./routes/api-routes.json, Ruta: GET /users
178
- [RUTA ACTUAL] Archivo: ./routes/other-routes.json, Ruta: GET /users
179
- ```
69
+ ### 🚀 Rendimiento Optimizado
70
+ - Servidor HTTP/HTTPS de alto rendimiento
71
+ - Optimizaciones de rendimiento en el manejo de solicitudes
72
+ - Carga anticipada de módulos comunes para evitar operaciones redundantes
73
+ - Manejo eficiente de rutas estáticas y dinámicas
180
74
 
181
- - El mensaje en **rojo** indica la ruta que será sobreescrita
182
- - El mensaje en **amarillo** indica la ruta que prevalece
75
+ ### 🔐 Seguridad Avanzada
76
+ - Sistema de sesiones con cookies seguras personalizables
77
+ - Filtros para personalizar flags de seguridad de cookies (`Secure`, `SameSite`, etc.)
78
+ - Web Application Firewall (WAF) con detección de patrones de ataque
79
+ - Sistema de autenticación con múltiples estrategias (JWT, API Keys, Basic Auth, OAuth2, OpenID Connect)
80
+ - Protección contra SQL Injection, XSS y otros ataques comunes
183
81
 
184
- ### Recarga automática de rutas:
185
- Durante el desarrollo, puedes habilitar la recarga automática cuando se modifican los archivos de rutas:
82
+ ### 🏗️ Arquitectura Modular
83
+ - Componentes independientes para mayor flexibilidad
84
+ - Sistema de hooks y filtros similar al de WordPress
85
+ - Soporte para middlewares personalizados
86
+ - Arquitectura MVC completa con modelos, vistas y controladores
186
87
 
187
- ```javascript
188
- // Observar cambios en el directorio de rutas
189
- routeDirectoryLoader.watchRoutesDirectory(server, './routes', 1000); // 1000ms debounce
190
- ```
88
+ ### 📊 Soporte para Bases de Datos
89
+ - Adaptadores para diferentes motores de base de datos (Memory, MariaDB/MySQL, SQLite)
90
+ - Integración con QueryBuilder externo (qbuilderjs) para construir consultas SQL seguras
91
+ - Sistema de modelos con operaciones CRUD completas
191
92
 
192
- Visita nuestra página web: https://jerk.page.gd/
193
- Repositorio oficial: https://gitlab.com/bytedogssyndicate1/jerk/
194
-
195
- ## Características
196
-
197
- - **Arquitectura Modular**: Componentes independientes para mayor flexibilidad
198
- - **Seguridad Avanzada**: Firewall integrado (WAF) con detección de ataques
199
- - **Sistema de Hooks**: Similar al sistema de WordPress para extensibility
200
- - **Autenticación Flexible**: Soporte para JWT, API Keys, Basic Auth, OAuth2, OpenID Connect
201
- - **Almacenamiento de Tokens**: Soporte para memoria, JSON, SQLite y MariaDB
202
- - **Enrutamiento Avanzado**: Soporte para rutas parametrizadas, anidadas y estáticas
203
- - **Soporte para Frontend**: Capacidad de servir contenido HTML y otros tipos de contenido
204
- - **Configuración de Content-Type**: Especificación de headers Content-Type en routes.json
205
- - **Middlewares Integrados**: CORS, rate limiting, compresión, firewall, etc.
206
- - **Gestión de Controladores**: Carga dinámica de controladores desde archivos
207
- - **Carga de Rutas**: Definición de rutas desde archivos JSON
208
- - **Sistema de Sesiones**: Gestión completa de sesiones con soporte para autenticación
209
- - **Motor de Plantillas MVC**: Sistema profesional de vistas con soporte para filtros, helpers y hooks
210
- - **Arquitectura de Modelos Completa (MVC)**: Capa de modelos para la lógica de negocio y acceso a datos
211
- - **Sistema de Adaptadores de Base de Datos**: Soporte para múltiples motores de base de datos (MariaDB, MySQL, etc.)
212
- - **Compatible con qbuilderjs**: Soporte para integrar el QueryBuilder externo qbuilderjs para construir consultas SQL complejas de manera segura y eficiente
213
- - **Servicio de Archivos Estáticos**: Soporte para servir archivos desde directorios locales con configuración flexible
214
- - **Extensibilidad**: Sistema de hooks y filters para personalización
93
+ ### 🎨 Motores de Plantillas
94
+ - Motor de plantillas con soporte para variables, condiciones, bucles e inclusiones
95
+ - Filtros y helpers personalizables
96
+ - Soporte para layouts y vistas dinámicas
215
97
 
216
98
  ## Instalación
217
99
 
@@ -222,80 +104,94 @@ npm install jerkjs
222
104
  ## Uso Básico
223
105
 
224
106
  ```javascript
225
- const { APIServer, Router, Logger } = require('jerkjs');
107
+ const { APIServer, RouteDirectoryLoader, ViewEngine, ModelManager, MemoryAdapter } = require('jerkjs');
226
108
 
227
109
  // Crear instancia del servidor
228
110
  const server = new APIServer({
229
- port: 3000,
230
- host: 'localhost'
111
+ port: 3000,
112
+ host: 'localhost'
231
113
  });
232
114
 
233
- // Crear instancia del logger
234
- const logger = new Logger({ level: 'info' });
235
-
236
- // Definir rutas
237
- server.addRoute('GET', '/', (req, res) => {
238
- res.writeHead(200, { 'Content-Type': 'application/json' });
239
- res.end(JSON.stringify({ message: '¡Hola Mundo!' }));
115
+ // Configurar motor de vistas
116
+ const viewEngine = new ViewEngine({
117
+ viewsDir: './views',
118
+ defaultLayout: 'layout.html'
240
119
  });
241
120
 
242
- // Iniciar el servidor
243
- server.start();
244
- ```
121
+ // Configurar sistema de modelos
122
+ const modelManager = new ModelManager();
123
+ const memoryAdapter = new MemoryAdapter();
124
+ modelManager.registerAdapter('memory', memoryAdapter);
245
125
 
246
- ## Componentes Principales
126
+ // Asociar componentes al servidor
127
+ server.viewEngine = viewEngine;
128
+ server.modelManager = modelManager;
247
129
 
248
- ### APIServer
249
- Servidor HTTP/HTTPS básico con soporte para rutas parametrizadas, middlewares y configuración avanzada.
250
-
251
- ### Router
252
- Sistema de enrutamiento avanzado con soporte para rutas anidadas y prefijos.
253
-
254
- ### Authenticator
255
- Middleware de autenticación con soporte para múltiples métodos (JWT, API Keys, Basic Auth, OAuth2, OpenID Connect).
256
-
257
- ### SecurityEnhancedServer
258
- Servidor con funcionalidades de seguridad avanzada (WAF) integradas.
130
+ // Cargar rutas desde directorio
131
+ const routeDirectoryLoader = new RouteDirectoryLoader();
132
+ routeDirectoryLoader.loadRoutesFromDirectory(server, './routes');
259
133
 
260
- ### RouteLoader
261
- Carga de rutas desde archivos JSON con soporte para autenticación, controladores y especificación de content-type.
134
+ // Iniciar el servidor
135
+ server.start();
136
+ ```
262
137
 
263
- ### TokenManager
264
- Gestión de tokens JWT con diferentes tipos de almacenamiento (memoria, JSON, SQLite, MariaDB).
138
+ ## Seguridad de Sesiones
265
139
 
266
- ### Firewall
267
- Middleware de firewall con detección de patrones de ataque y listas blancas/negras.
140
+ JERK Framework incluye un sistema de sesiones con soporte para personalización de flags de seguridad a través de filtros:
268
141
 
269
- ### Hooks System
270
- Sistema de hooks y filters similar al de WordPress para extensibilidad.
142
+ ```javascript
143
+ const { hooks } = require('jerkjs');
271
144
 
272
- ### SessionManager
273
- Sistema completo de gestión de sesiones con soporte para autenticación basada en sesiones.
145
+ // Personalizar flags de cookies de sesión
146
+ hooks.addFilter('session_cookie_flags', (defaultFlags, req, res, sessionId) => {
147
+ // Detectar si la solicitud es HTTPS
148
+ const isHttps = (req && req.connection && req.connection.encrypted) ||
149
+ (req && req.headers && req.headers['x-forwarded-proto'] === 'https');
150
+
151
+ let flags = defaultFlags;
152
+
153
+ // Agregar la flag Secure si es HTTPS
154
+ if (isHttps) {
155
+ flags += '; Secure';
156
+ }
157
+
158
+ // Agregar SameSite según el contexto
159
+ flags += '; SameSite=Lax';
160
+
161
+ return flags;
162
+ });
163
+ ```
274
164
 
275
- ### ViewEngine
276
- Motor de plantillas profesional con soporte para filtros, helpers, condiciones, bucles y hooks.
165
+ ## Componentes Principales
277
166
 
278
- ### ControllerBase
279
- Controlador base que facilita el desarrollo de controladores MVC con soporte para vistas.
167
+ ### Servidor (APIServer)
168
+ - Servidor HTTP/HTTPS básico con soporte para rutas parametrizadas
169
+ - Manejo de archivos estáticos con soporte para índices y control de caché
170
+ - Sistema de hooks para extensibilidad
171
+ - Soporte para middlewares y manejo de cuerpos de solicitud con límites de tamaño
280
172
 
281
- ## Seguridad
173
+ ### Sistema de Enrutamiento
174
+ - Router con soporte para rutas anidadas
175
+ - RouteMatcher para coincidencia de rutas parametrizadas con cacheo de expresiones regulares
176
+ - Soporte para rutas estáticas y dinámicas con prioridad adecuada
282
177
 
283
- El framework incluye múltiples capas de seguridad:
178
+ ### Middleware
179
+ - CORS, Autenticación, Sesiones, Validación, Rate Limiting
180
+ - Compresión (gzip/deflate) con sistema de hooks
181
+ - Firewall (WAF) con detección de patrones de ataque
182
+ - Audit Logger para eventos de seguridad
284
183
 
285
- - **Web Application Firewall (WAF)**: Detección de SQL injection, XSS, path traversal, etc.
286
- - **Rate Limiting**: Limitación de peticiones por IP o usuario
287
- - **Firewall**: Bloqueo automático por intentos fallidos
288
- - **Listas Blancas/Negras**: Control de acceso por IP
289
- - **Auditoría de Seguridad**: Registro de eventos de seguridad
290
- - **Autenticación Robusta**: Soporte para múltiples métodos de autenticación
184
+ ### Componentes MVC
185
+ - ControllerBase con soporte para vistas, layouts y variables
186
+ - ModelBase con operaciones CRUD
187
+ - ViewEngine con soporte para filtros, helpers, condiciones, bucles e inclusiones
188
+ - ModelManager con soporte para múltiples adaptadores
291
189
 
292
- ## Sistema de Hooks
190
+ ## Sistema de Hooks y Filtros
293
191
 
294
- El framework incluye un sistema de hooks y filters similar al de WordPress:
192
+ El framework incluye un sistema completo de hooks y filtros similar al de WordPress:
295
193
 
296
194
  ```javascript
297
- const { hooks } = require('jerkjs');
298
-
299
195
  // Registrar una acción
300
196
  hooks.addAction('firewall_request_blocked', (rule, clientIP, req, res) => {
301
197
  console.log(`Solicitud bloqueada: ${rule.name} para IP: ${clientIP}`);
@@ -311,203 +207,26 @@ hooks.addFilter('session_create_data', (userData, req) => {
311
207
  });
312
208
  ```
313
209
 
314
- ## Motor de Plantillas MVC
315
-
316
- El framework incluye un motor de plantillas profesional con soporte para:
317
-
318
- - Variables: `{{variable}}`
319
- - Condiciones: `{{if variable}}contenido{{endif}}`
320
- - Bucles: `{{foreach:array}}contenido{{endforeach}}`
321
- - Inclusiones: `{{include:header}}`
322
- - Filtros: `{{variable|upper}}`
323
- - Helpers personalizados
324
-
325
- ## Gestión de Sesiones
326
-
327
- El framework incluye un sistema completo de gestión de sesiones:
328
-
329
- ```javascript
330
- const { SessionManager } = require('jerkjs');
331
-
332
- const sessionManager = new SessionManager({
333
- secret: 'your-session-secret',
334
- timeout: 3600000 // 1 hora
335
- });
336
-
337
- // Usar como middleware
338
- server.use(sessionManager.middleware());
339
- ```
340
-
341
- ## Ejemplos
342
-
343
- El proyecto incluye varios ejemplos completos:
344
-
345
- - **v2_json_auth**: Autenticación JWT con tokens almacenados en JSON
346
- - **v2_mariadb_auth**: Autenticación JWT con tokens almacenados en MariaDB
347
- - **v2_sqlite_auth**: Autenticación JWT con tokens almacenados en SQLite
348
- - **public**: API pública de ejemplo con CORS y rate limiting
349
- - **frontend**: Ejemplo de servidor que combina API y frontend con diferentes content-types
350
- - **hooks**: Ejemplo avanzado de uso del sistema de hooks con logging y seguimiento de solicitudes
351
-
352
- Para ver los ejemplos completos, visita los directorios `v2examplle/` y `examples/`.
353
-
354
-
355
- ## Documentación
356
-
357
- Además de la documentación en el README, el proyecto incluye documentación adicional:
358
-
359
- - **Guía de inicio rápido**: `docs/guia_inicio_rapido_jerkjs.md` - Una guía completa para empezar rápidamente con JERKJS, incluyendo formatos de archivos, estructura de controladores, motor de plantillas y sistema de hooks.
360
-
361
210
  ## Contribuciones
362
211
 
363
- Las contribuciones son bienvenidas. Por favor, abre un issue o envía un pull request en GitLab.
212
+ Las contribuciones son bienvenidas. Por favor, abre un issue o envía un pull request para sugerir cambios o mejoras.
364
213
 
365
214
  ## Licencia
366
215
 
367
- Apache 2.0
216
+ Este proyecto está licenciado bajo la Apache License 2.0 - ver el archivo LICENSE para más detalles.
368
217
 
369
- ## Arquitectura de Modelos (MVC)
218
+ ## Autor
370
219
 
371
- 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.
220
+ JERK Framework Team / Benjamin Sanhez Cardenas
372
221
 
373
- ### Ejemplo de Modelo Simple con MariaDB
222
+ ## Repositorio
374
223
 
375
- ```javascript
376
- const { ModelBase, MariaDBAdapter } = require('jerkjs');
377
-
378
- // Definir un modelo para usuarios
379
- class UserModel extends ModelBase {
380
- constructor(options = {}) {
381
- super({
382
- ...options,
383
- tableName: options.tableName || 'users'
384
- });
385
-
386
- // Definir campos del modelo
387
- this.fields = {
388
- id: { type: 'integer', primaryKey: true, autoIncrement: true },
389
- username: { type: 'string', required: true },
390
- email: { type: 'string', required: true },
391
- password: { type: 'string', required: true },
392
- createdAt: { type: 'datetime', default: 'CURRENT_TIMESTAMP' }
393
- };
394
- }
395
-
396
- // Método personalizado para encontrar usuario por email
397
- async findByEmail(email) {
398
- return await this.findOne({ email });
399
- }
400
-
401
- // Método personalizado para crear usuario con validación
402
- async createUser(userData) {
403
- // Validar datos antes de crear
404
- const validation = this.validate('create', userData);
405
- if (!validation.isValid) {
406
- throw new Error(`Validación fallida: ${validation.errors.join(', ')}`);
407
- }
224
+ GitLab: https://gitlab.com/bytedogssyndicate1/jerk
408
225
 
409
- return await this.create(userData);
410
- }
411
- }
226
+ ## Informe de Rendimiento del Módulo de Estadísticas
412
227
 
413
- // Configurar el adaptador de MariaDB
414
- const dbConfig = {
415
- host: 'localhost',
416
- user: 'tu_usuario',
417
- password: 'tu_contraseña',
418
- database: 'tu_base_de_datos'
419
- };
420
-
421
- const mariaDBAdapter = new MariaDBAdapter(dbConfig);
422
-
423
- // Crear instancia del modelo con el adaptador
424
- const userModel = new UserModel({
425
- adapter: mariaDBAdapter,
426
- tableName: 'users'
427
- });
428
-
429
- // Uso del modelo
430
- async function ejemploUsoModelo() {
431
- try {
432
- // Crear un nuevo usuario
433
- const nuevoUsuario = await userModel.createUser({
434
- username: 'juan.perez',
435
- email: 'juan@example.com',
436
- password: 'contraseña_segura'
437
- });
438
-
439
- console.log('Usuario creado:', nuevoUsuario);
440
-
441
- // Buscar usuario por email
442
- const usuario = await userModel.findByEmail('juan@example.com');
443
- console.log('Usuario encontrado:', usuario);
444
- } catch (error) {
445
- console.error('Error:', error.message);
446
- }
447
- }
448
- ```
449
-
450
- ### Uso de Modelos en Controladores con loadModel
451
-
452
- JERK Framework proporciona un helper `loadModel` en el ControllerBase para facilitar la carga y uso de modelos en los controladores:
453
-
454
- ```javascript
455
- const ControllerBase = require('jerkjs').ControllerBase;
456
-
457
- class UserController extends ControllerBase {
458
- constructor() {
459
- super();
460
-
461
- // Cargar el modelo de usuario
462
- this.userModel = this.loadModel('UserModel', {
463
- // Opciones del modelo
464
- });
465
- }
466
-
467
- async getAllUsers(req, res) {
468
- try {
469
- // Usar el modelo para obtener usuarios
470
- const users = await this.userModel.find({});
471
-
472
- this.json(res, { success: true, data: users });
473
- } catch (error) {
474
- this.json(res, { success: false, error: error.message }, 500);
475
- }
476
- }
477
-
478
- async getUserById(req, res) {
479
- try {
480
- const userId = req.params.id;
481
-
482
- // Usar el modelo para encontrar un usuario específico
483
- const user = await this.userModel.findOne({ id: userId });
484
-
485
- if (!user) {
486
- this.json(res, { success: false, error: 'Usuario no encontrado' }, 404);
487
- return;
488
- }
489
-
490
- this.json(res, { success: true, data: user });
491
- } catch (error) {
492
- this.json(res, { success: false, error: error.message }, 500);
493
- }
494
- }
495
-
496
- async createUser(req, res) {
497
- try {
498
- // Usar el modelo para crear un nuevo usuario
499
- const newUser = await this.userModel.createUser(req.body);
500
-
501
- this.json(res, { success: true, data: newUser }, 201);
502
- } catch (error) {
503
- this.json(res, { success: false, error: error.message }, 400);
504
- }
505
- }
506
- }
507
-
508
- module.exports = new UserController();
509
- ```
228
+ Para ver el informe detallado de pruebas y rendimiento del módulo de estadísticas, consulte: [ESTADISTICAS_RENDIMIENTO.md](ESTADISTICAS_RENDIMIENTO.md)
510
229
 
511
- ## Documentación del Framework
230
+ ## Soporte
512
231
 
513
- Para una descripción detallada de la arquitectura y componentes del framework, consulta el archivo [JERK_FRAMEWORK_DOCUMENTATION.md](JERK_FRAMEWORK_DOCUMENTATION.md).
232
+ Para soporte, por favor abre un issue en el repositorio o visita nuestra página web: https://jerk.page.gd/