jerkjs 2.5.6 → 2.6.1

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 (46) hide show
  1. package/CHANGELOG.md +167 -79
  2. package/README.md +134 -146
  3. package/RESULTADOS_WAF.md +63 -0
  4. package/doc-2.5/ADMIN_EXTENSION_COMMANDS_MANUAL.md +261 -0
  5. package/doc-2.5/ADMIN_EXTENSION_HOOK_EXAMPLE.md +28 -0
  6. package/doc-2.5/ADMIN_EXTENSION_INTEGRATION_MANUAL.md +232 -0
  7. package/doc-2.5/CACHE_SYSTEM_MAP.md +206 -0
  8. package/doc-2.5/MANUAL_MODULOS_ADMIN.md +287 -0
  9. package/doc-2.5/QUEUE_CLI_MODULE_MANUAL.md +289 -0
  10. package/doc-2.5/QUEUE_SYSTEM_MANUAL.md +320 -0
  11. package/doc-2.5/ROUTE_CACHE_MODULE_MANUAL.md +205 -0
  12. package/doc-2.5/WAF_MODULE_MANUAL.md +229 -0
  13. package/index.js +19 -4
  14. package/jerk-admin-client/README.md +69 -0
  15. package/jerk-admin-client/package.json +23 -0
  16. package/jerk-admin-client.js +257 -0
  17. package/lib/admin/AdminExtension.js +491 -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/ControllerGeneratorModule.js +414 -0
  22. package/lib/admin/modules/QueueManagementModule.js +265 -0
  23. package/lib/admin/modules/RouteCacheModule.js +227 -0
  24. package/lib/admin/modules/RouteManagerModule.js +468 -0
  25. package/lib/admin/modules/STATS_MODULE_README.md +113 -0
  26. package/lib/admin/modules/StatsModule.js +140 -0
  27. package/lib/admin/modules/SystemModule.js +140 -0
  28. package/lib/admin/modules/TimeModule.js +95 -0
  29. package/lib/admin/modules/ViewCacheStatsModule.js +92 -0
  30. package/lib/admin/modules/WAFModule.js +737 -0
  31. package/lib/cache/CacheHooks.js +141 -0
  32. package/lib/core/server.js +223 -77
  33. package/lib/middleware/firewall.js +112 -17
  34. package/lib/mvc/viewEngine.js +89 -5
  35. package/lib/queue/GlobalQueueStorage.js +38 -0
  36. package/lib/queue/QueueSystem.js +451 -0
  37. package/lib/queue/admin_example.js +114 -0
  38. package/lib/queue/example.js +268 -0
  39. package/lib/queue/integration.js +109 -0
  40. package/lib/router/RouteMatcher.js +242 -54
  41. package/lib/utils/globalStats.js +16 -0
  42. package/lib/utils/globalViewCacheInfo.js +16 -0
  43. package/lib/utils/globalWAFStats.js +54 -0
  44. package/package.json +2 -2
  45. package/test-colors.js +46 -0
  46. package/test-help-alias.js +31 -0
@@ -0,0 +1,206 @@
1
+ # Mapa de Procesos de Caché del Framework JERK
2
+
3
+ ## Introducción
4
+
5
+ Este documento describe los diferentes sistemas de caché implementados en el framework JERK y cómo se integran en los flujos del sistema.
6
+
7
+ ## Sistemas de Caché
8
+
9
+ ### 1. Caché de Expresiones Regulares para Rutas (RouteMatcher)
10
+
11
+ **Ubicación**: `lib/router/RouteMatcher.js`
12
+ **Tipo**: Mapa de caché (Map)
13
+ **Propósito**: Almacenar expresiones regulares compiladas para rutas parametrizadas
14
+ **Clave**: Ruta con parámetros (ej. `/users/:id`)
15
+ **Valor**: Expresión regular compilada
16
+ **Flujo de proceso**:
17
+ 1. Al procesar una ruta parametrizada, se convierte a expresión regular
18
+ 2. Antes de compilar, se verifica si ya existe en el cache
19
+ 3. Si existe, se devuelve la expresión regular cacheada
20
+ 4. Si no existe, se compila, se almacena en cache y se devuelve
21
+
22
+ **Beneficios**:
23
+ - Evita compilación repetida de expresiones regulares
24
+ - Mejora el rendimiento de coincidencia de rutas parametrizadas
25
+ - Reduce el uso de CPU en operaciones repetidas
26
+
27
+ ### 2. Caché de Vistas (ViewEngine)
28
+
29
+ **Ubicación**: `lib/mvc/viewEngine.js`
30
+ **Tipo**: Mapa de caché (Map)
31
+ **Propósito**: Almacenar contenido de vistas ya procesadas (sin variables)
32
+ **Clave**: Ruta completa del archivo de vista
33
+ **Valor**: Contenido de la vista procesado (condiciones, bucles, etc. resueltos)
34
+ **Flujo de proceso**:
35
+ 1. Al solicitar una vista, se verifica si está en cache
36
+ 2. Si está en cache, se procesa con las variables y se devuelve
37
+ 3. Si no está en cache, se lee el archivo, se procesa (condiciones, bucles, etc.)
38
+ 4. Si el cache está habilitado, se almacena la vista procesada (sin variables)
39
+ 5. Se procesan las variables y se devuelve el resultado
40
+
41
+ **Beneficios**:
42
+ - Evita lectura repetida de archivos de vistas
43
+ - Evita procesamiento repetido de condiciones y bucles
44
+ - Mejora el rendimiento de renderizado de vistas
45
+
46
+ ### 3. Caché de Controladores (ControllerLoader)
47
+
48
+ **Ubicación**: `lib/loader/controllerLoader.js`
49
+ **Tipo**: Sistema de caché de módulos de Node.js
50
+ **Propósito**: Evitar recarga repetida de módulos de controladores
51
+ **Clave**: Ruta del archivo del controlador
52
+ **Valor**: Instancia del módulo del controlador
53
+ **Flujo de proceso**:
54
+ 1. Al cargar un controlador, se verifica si ya está en el cache de require
55
+ 2. Si no está en cache, se carga y se mantiene en require.cache
56
+ 3. En subsiguientes solicitudes, se devuelve la instancia cacheada
57
+
58
+ **Beneficios**:
59
+ - Evita recarga repetida de módulos
60
+ - Mejora el rendimiento de carga de controladores
61
+ - Reduce el uso de memoria
62
+
63
+ ### 4. Índices de Rutas (RouteMatcher)
64
+
65
+ **Ubicación**: `lib/router/RouteMatcher.js`
66
+ **Tipo**: Mapas de índices y estructuras de datos
67
+ **Propósito**: Optimizar la búsqueda de rutas mediante pre-filtrado
68
+ **Componentes**:
69
+ - `exactRoutes`: Mapa de rutas exactas por método y path
70
+ - `routeBuckets`: Estructura jerárquica por método, número de segmentos y primer segmento
71
+ - `indexesValid`: Bandera para validar si los índices están actualizados
72
+
73
+ **Flujo de proceso**:
74
+ 1. Al registrar rutas, se actualizan los índices
75
+ 2. Al buscar una ruta, se usan los índices para pre-filtrar candidatos
76
+ 3. Se buscan coincidencias exactas primero (más rápido)
77
+ 4. Se buscan rutas parametrizadas solo entre candidatos filtrados
78
+ 5. Se buscan rutas estáticas por prefijo entre candidatos filtrados
79
+
80
+ **Beneficios**:
81
+ - Reduce drásticamente el número de rutas a evaluar
82
+ - Mejora el rendimiento de coincidencia de rutas
83
+ - Escala mejor con un gran número de rutas
84
+
85
+ ## Flujos de Integración de Caché
86
+
87
+ ### Flujo de Procesamiento de Solicitudes
88
+
89
+ ```
90
+ Solicitud HTTP
91
+
92
+ Middleware de seguridad
93
+
94
+ Verificación de índices de rutas (RouteMatcher)
95
+
96
+ → Búsqueda por ruta exacta (más rápida)
97
+
98
+ → Pre-filtrado por número de segmentos y primer segmento
99
+
100
+ → Búsqueda en rutas candidatas
101
+
102
+ → Coincidencia con expresiones regulares (usando cache)
103
+
104
+ Ejecución del handler de la ruta
105
+
106
+ Renderizado de vista (usando cache de vistas)
107
+
108
+ Respuesta HTTP
109
+ ```
110
+
111
+ ### Flujo de Caché de Expresiones Regulares
112
+
113
+ ```
114
+ Solicitud de coincidencia de ruta parametrizada
115
+
116
+ → ¿Está la expresión regular en cache?
117
+
118
+ ┌─────────────┬─────────────┐
119
+ │ SÍ │ NO │
120
+ │ │ │
121
+ │ Devolver │ Compilar │
122
+ │ regex │ expresión │
123
+ │ cacheada │ regular │
124
+ │ │ │
125
+ └─────────────┴─────────────┘
126
+
127
+ Almacenar en cache
128
+
129
+ Usar para coincidencia
130
+ ```
131
+
132
+ ### Flujo de Caché de Vistas
133
+
134
+ ```
135
+ Solicitud de renderizado de vista
136
+
137
+ → ¿Está la vista en cache?
138
+
139
+ ┌─────────────┬─────────────┐
140
+ │ SÍ │ NO │
141
+ │ │ │
142
+ │ Procesar │ Leer archivo│
143
+ │ con vars │ de vista │
144
+ │ │ │
145
+ │ Devolver │ Procesar │
146
+ │ resultado │ condiciónes,│
147
+ │ │ bucles, etc.│
148
+ │ │ │
149
+ │ │ → ¿Cache │
150
+ │ │ habilitado?│
151
+ │ │ ↓ │
152
+ │ │ ┌─────────┼─┐
153
+ │ │ │ SÍ │ │
154
+ │ │ │ │ │
155
+ │ │ │ Almacenar││
156
+ │ │ │ vista en ││
157
+ │ │ │ cache ││
158
+ │ │ └─────────┼─┘
159
+ │ │ │
160
+ └─────────────┴─────────────┘
161
+
162
+ Devolver HTML renderizado
163
+ ```
164
+
165
+ ## Estrategias de Invalidación de Caché
166
+
167
+ ### Caché de Expresiones Regulares
168
+ - No requiere invalidación frecuente
169
+ - Se actualiza automáticamente al cambiar las rutas
170
+
171
+ ### Caché de Vistas
172
+ - Se puede limpiar manualmente con `viewEngine.clearCache()`
173
+ - No se invalida automáticamente (diseñado para vistas estáticas)
174
+
175
+ ### Caché de Controladores
176
+ - Se mantiene durante todo el ciclo de vida del proceso
177
+ - Se puede limpiar manualmente eliminando del `require.cache`
178
+
179
+ ### Índices de Rutas
180
+ - Se actualizan automáticamente al registrar nuevas rutas
181
+ - Se invalidan si cambia el número total de rutas
182
+
183
+ ## Beneficios del Sistema de Caché
184
+
185
+ 1. **Mejora de Rendimiento**: Reducción significativa de operaciones repetidas
186
+ 2. **Eficiencia de CPU**: Menos compilación de expresiones regulares y procesamiento de vistas
187
+ 3. **Eficiencia de I/O**: Menos lecturas de disco para archivos de vistas
188
+ 4. **Escalabilidad**: Mejor manejo de alto volumen de solicitudes
189
+ 5. **Optimización de Memoria**: Reutilización de estructuras de datos ya procesadas
190
+
191
+ ## Consideraciones de Seguridad
192
+
193
+ - Las cachés no almacenan datos sensibles de usuarios
194
+ - Las expresiones regulares cacheadas no contienen información de entrada del usuario
195
+ - Las vistas cacheadas no contienen datos de sesión o variables de usuario
196
+ - El sistema de caché no expone información interna del sistema
197
+
198
+ ## Conclusión
199
+
200
+ El framework JERK implementa múltiples niveles de caché para optimizar el rendimiento:
201
+ - Caché de expresiones regulares para rutas parametrizadas
202
+ - Caché de vistas procesadas
203
+ - Índices optimizados para búsqueda de rutas
204
+ - Caché de módulos de controladores
205
+
206
+ Estos sistemas de caché trabajan juntos para proporcionar un rendimiento óptimo al minimizar operaciones repetidas y maximizar la eficiencia del procesamiento de solicitudes.
@@ -0,0 +1,287 @@
1
+ # Manual de Uso: Módulos de Administración de JERK Framework
2
+
3
+ ## Descripción General
4
+
5
+ Este manual describe el uso de los módulos de administración interactivos para crear controladores y gestionar rutas en JERK Framework.
6
+
7
+ ## Módulo de Generación de Controladores
8
+
9
+ ### Descripción
10
+ El módulo de generación de controladores permite crear nuevos controladores de manera interactiva con una interfaz paso a paso.
11
+
12
+ ### Comandos Disponibles
13
+ - `generate-controller`
14
+ - `gen-ctrl`
15
+ - `new-ctrl`
16
+
17
+ ### Cómo Usar el Módulo
18
+
19
+ 1. **Iniciar el proceso**
20
+ ```
21
+ > generate-controller
22
+ ```
23
+
24
+ 2. **Nombre del controlador**
25
+ - Ingresa el nombre base del controlador (sin la palabra "Controller")
26
+ - Ejemplo: "User", "Product", "Home"
27
+
28
+ 3. **Selección de métodos**
29
+ - Selecciona los métodos que deseas incluir:
30
+ - 1. index - Método para mostrar lista de elementos
31
+ - 2. show - Método para mostrar un elemento específico
32
+ - 3. create - Método para crear un nuevo elemento
33
+ - 4. update - Método para actualizar un elemento
34
+ - 5. delete - Método para eliminar un elemento
35
+ - 6. All - Todos los métodos anteriores
36
+ - Opciones de entrada:
37
+ - Números separados por comas: "1,2,3"
38
+ - Nombres de métodos: "index,show,create"
39
+ - "All" para todos los métodos
40
+
41
+ 4. **Ruta del archivo**
42
+ - Indica la ruta donde crear el archivo del controlador
43
+ - Deja vacío para usar "./controllers/" por defecto
44
+ - Ejemplo: "./controllers/", "./src/controllers/"
45
+
46
+ 5. **Confirmación**
47
+ - Se mostrará una vista previa del código generado
48
+ - Confirma con "sí" para crear el archivo o "no" para cancelar
49
+
50
+ ### Ejemplo Completo
51
+ ```
52
+ > generate-controller
53
+ === Generador de Controladores ===
54
+ Por favor, introduce el nombre del controlador (sin la palabra "Controller"):
55
+ > User
56
+
57
+ Selecciona los métodos que deseas incluir (separados por comas):
58
+ > 1,2,3
59
+
60
+ Indica la ruta donde deseas crear el archivo del controlador:
61
+ >
62
+
63
+ === Vista Previa del Controlador ===
64
+ [... código del controlador ...]
65
+ ¿Deseas crear este controlador? (sí/no):
66
+ > sí
67
+
68
+ ✅ Controlador "UserController" creado exitosamente en: ./controllers/UserController.js
69
+ ```
70
+
71
+ ## Módulo de Gestión de Rutas
72
+
73
+ ### Descripción
74
+ El módulo de gestión de rutas permite crear nuevas rutas, deshabilitar rutas existentes y ver rutas registradas o activas.
75
+
76
+ ### Comandos Disponibles
77
+ - `manage-routes`
78
+ - `route-manager`
79
+ - `route-mgmt`
80
+
81
+ ## Módulo de Cache de Rutas
82
+
83
+ ### Descripción
84
+ El módulo de cache de rutas permite monitorear y gestionar el cache de rutas del sistema, incluyendo visualización de estadísticas, contenido del cache, y limpieza del cache.
85
+
86
+ ### Comandos Disponibles
87
+ - `route-cache`
88
+ - `cache-stats`
89
+ - `cache-view`
90
+ - `cache-dynamic`
91
+ - `cache-static`
92
+ - `cache-clear`
93
+
94
+ ### Cómo Usar el Módulo
95
+
96
+ 1. **Ver estadísticas del cache**
97
+ ```
98
+ > route-cache
99
+ ```
100
+
101
+ 2. **Ver contenido completo del cache**
102
+ ```
103
+ > cache-view
104
+ ```
105
+
106
+ 3. **Ver solo rutas dinámicas (parametrizadas)**
107
+ ```
108
+ > cache-dynamic
109
+ ```
110
+
111
+ 4. **Ver solo rutas estáticas (exactas)**
112
+ ```
113
+ > cache-static
114
+ ```
115
+
116
+ 5. **Limpiar el cache de rutas**
117
+ ```
118
+ > cache-clear
119
+ ```
120
+
121
+ ### Ejemplo de Uso
122
+ ```
123
+ > route-cache
124
+ === Estadísticas del Cache de Rutas ===
125
+ Rutas dinámicas (parametrizadas) en cache: 5
126
+ Rutas estáticas exactas en cache: 10
127
+ Tamaño total de índices: 15
128
+ Índices válidos: Sí
129
+
130
+ > cache-dynamic
131
+ === Cache de Rutas Dinámicas (Parametrizadas) ===
132
+ 1. Ruta: /users/:id
133
+ Regex: /^\/users\/([^\/]+?)$/
134
+
135
+ Total: 1 rutas dinámicas en cache.
136
+
137
+ > cache-clear
138
+ === Limpieza del Cache de Rutas ===
139
+ Rutas dinámicas eliminadas: 5
140
+ Rutas estáticas eliminadas: 10
141
+ Cache de rutas limpiado exitosamente.
142
+ ```
143
+
144
+ ### Cómo Usar el Módulo
145
+
146
+ 1. **Iniciar el proceso**
147
+ ```
148
+ > route-mgmt
149
+ ```
150
+
151
+ 2. **Menú Principal**
152
+ El sistema mostrará las opciones disponibles:
153
+ - 1. Crear nueva ruta
154
+ - 2. Deshabilitar ruta existente
155
+ - 3. Ver rutas registradas
156
+ - 4. Ver rutas activas
157
+
158
+ ### Opción 1: Crear Nueva Ruta
159
+
160
+ 1. **Selecciona el método HTTP**
161
+ - 1. GET
162
+ - 2. POST
163
+ - 3. PUT
164
+ - 4. DELETE
165
+ - 5. PATCH
166
+ - 6. Otro
167
+ - O ingresa el método directamente (GET, POST, etc.)
168
+
169
+ 2. **Introduce la ruta**
170
+ - Ejemplo: "/api/users", "/users/:id"
171
+
172
+ 3. **Ruta al archivo del controlador**
173
+ - Ejemplo: "./controllers/UserController.js"
174
+
175
+ 4. **Nombre del handler**
176
+ - Nombre del método en el controlador
177
+ - Ejemplo: "index", "show", "create"
178
+
179
+ 5. **Confirmación**
180
+ - Se mostrará una vista previa de la entrada para routes.json
181
+ - Confirma con "sí" para crear la ruta o "no" para cancelar
182
+
183
+ ### Opción 2: Deshabilitar Ruta Existente
184
+
185
+ 1. **Selecciona la ruta**
186
+ - El sistema mostrará una lista numerada de rutas registradas
187
+ - Ingresa el número de la ruta que deseas deshabilitar
188
+
189
+ 2. **Confirmación**
190
+ - Se mostrará la ruta seleccionada
191
+ - Confirma con "sí" para deshabilitar la ruta o "no" para cancelar
192
+
193
+ ### Opción 3: Ver Rutas Registradas
194
+
195
+ - Muestra todas las rutas registradas en el sistema
196
+ - Formato: Número. Método HTTP Ruta
197
+
198
+ ### Opción 4: Ver Rutas Activas
199
+
200
+ - Muestra las rutas que han recibido solicitudes recientemente
201
+ - Formato: Método HTTP Ruta - Fecha y hora de la última solicitud
202
+
203
+ ### Ejemplo de Creación de Ruta
204
+ ```
205
+ > route-mgmt
206
+ === Gestión de Rutas ===
207
+ ¿Qué deseas hacer?
208
+ 1. Crear nueva ruta
209
+ 2. Deshabilitar ruta existente
210
+ 3. Ver rutas registradas
211
+ 4. Ver rutas activas
212
+ > 1
213
+
214
+ === Crear Nueva Ruta ===
215
+ Selecciona el método HTTP:
216
+ 1. GET
217
+ 2. POST
218
+ 3. PUT
219
+ 4. DELETE
220
+ 5. PATCH
221
+ 6. Otro
222
+ > GET
223
+
224
+ Método seleccionado: GET
225
+ Introduce la ruta (ej: /api/users, /users/:id):
226
+ > /api/demo
227
+
228
+ Ruta: /api/demo
229
+ Introduce la ruta al archivo del controlador (ej: ./controllers/UserController.js):
230
+ > ./controllers/DemoController.js
231
+
232
+ Introduce el nombre del handler (método del controlador):
233
+ > index
234
+
235
+ === Vista Previa de la Ruta ===
236
+ Método: GET
237
+ Ruta: /api/demo
238
+ Controlador: ./controllers/DemoController.js
239
+ Handler: index
240
+
241
+ Entrada para routes.json:
242
+ {
243
+ "path": "/api/demo",
244
+ "method": "GET",
245
+ "controller": "./controllers/DemoController.js",
246
+ "handler": "index",
247
+ "contentType": "application/json"
248
+ }
249
+
250
+ ¿Deseas crear esta ruta? (sí/no):
251
+ > sí
252
+
253
+ ✅ Ruta "GET /api/demo" creada exitosamente.
254
+ ```
255
+
256
+ ## Consejos de Uso
257
+
258
+ ### Para Controladores
259
+ - Usa nombres descriptivos para tus controladores
260
+ - Considera qué métodos necesitas antes de crear el controlador
261
+ - Elige rutas de archivo que sigan la estructura de tu proyecto
262
+
263
+ ### Para Rutas
264
+ - Asegúrate de que el controlador y el handler existan antes de crear la ruta
265
+ - Usa rutas RESTful cuando sea posible
266
+ - Considera el método HTTP adecuado para cada operación
267
+
268
+ ## Errores Comunes y Soluciones
269
+
270
+ ### Controlador
271
+ - **Nombre inválido**: Asegúrate de usar solo letras, números y guiones bajos
272
+ - **Ruta de archivo no encontrada**: Verifica que la ruta sea correcta
273
+
274
+ ### Rutas
275
+ - **Ruta duplicada**: El sistema no impide rutas duplicadas
276
+ - **Controlador o handler no encontrado**: Verifica que existan antes de crear la ruta
277
+ - **Método HTTP inválido**: Usa métodos estándar (GET, POST, PUT, DELETE, PATCH)
278
+
279
+ ## Comandos Generales
280
+
281
+ - `help`: Muestra la ayuda general
282
+ - `quit` o `exit`: Cierra la conexión
283
+ - `cancel`: Cancela el proceso interactivo actual
284
+
285
+ ## Soporte
286
+
287
+ Para soporte adicional, consulta la documentación del framework o contacta al equipo de desarrollo.