@ingcrea/aumic-puf 0.0.0-stage → 3.0.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.
- package/LICENSE +661 -0
- package/PUF-15.md +118 -0
- package/PUF_G16_Lighthouse.md +70 -0
- package/README.md +253 -2
- package/dist/adapters/astro.d.ts +28 -0
- package/dist/adapters/astro.d.ts.map +1 -0
- package/dist/adapters/astro.js +68 -0
- package/dist/adapters/astro.js.map +1 -0
- package/dist/adapters/base.d.ts +53 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +138 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/cpp.d.ts +27 -0
- package/dist/adapters/cpp.d.ts.map +1 -0
- package/dist/adapters/cpp.js +48 -0
- package/dist/adapters/cpp.js.map +1 -0
- package/dist/adapters/csharp.d.ts +28 -0
- package/dist/adapters/csharp.d.ts.map +1 -0
- package/dist/adapters/csharp.js +100 -0
- package/dist/adapters/csharp.js.map +1 -0
- package/dist/adapters/flutter.d.ts +27 -0
- package/dist/adapters/flutter.d.ts.map +1 -0
- package/dist/adapters/flutter.js +49 -0
- package/dist/adapters/flutter.js.map +1 -0
- package/dist/adapters/java.d.ts +28 -0
- package/dist/adapters/java.d.ts.map +1 -0
- package/dist/adapters/java.js +123 -0
- package/dist/adapters/java.js.map +1 -0
- package/dist/adapters/nextjs.d.ts +27 -0
- package/dist/adapters/nextjs.d.ts.map +1 -0
- package/dist/adapters/nextjs.js +59 -0
- package/dist/adapters/nextjs.js.map +1 -0
- package/dist/adapters/php.d.ts +27 -0
- package/dist/adapters/php.d.ts.map +1 -0
- package/dist/adapters/php.js +50 -0
- package/dist/adapters/php.js.map +1 -0
- package/dist/adapters/python.d.ts +27 -0
- package/dist/adapters/python.d.ts.map +1 -0
- package/dist/adapters/python.js +55 -0
- package/dist/adapters/python.js.map +1 -0
- package/dist/adapters/rust.d.ts +27 -0
- package/dist/adapters/rust.d.ts.map +1 -0
- package/dist/adapters/rust.js +59 -0
- package/dist/adapters/rust.js.map +1 -0
- package/dist/adapters/selector.d.ts +14 -0
- package/dist/adapters/selector.d.ts.map +1 -0
- package/dist/adapters/selector.js +65 -0
- package/dist/adapters/selector.js.map +1 -0
- package/dist/adapters/shell.d.ts +28 -0
- package/dist/adapters/shell.d.ts.map +1 -0
- package/dist/adapters/shell.js +101 -0
- package/dist/adapters/shell.js.map +1 -0
- package/dist/adapters/swift.d.ts +28 -0
- package/dist/adapters/swift.d.ts.map +1 -0
- package/dist/adapters/swift.js +91 -0
- package/dist/adapters/swift.js.map +1 -0
- package/dist/adapters/typescript.d.ts +27 -0
- package/dist/adapters/typescript.d.ts.map +1 -0
- package/dist/adapters/typescript.js +63 -0
- package/dist/adapters/typescript.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +236 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interfaz.d.ts +21 -0
- package/dist/cli/interfaz.d.ts.map +1 -0
- package/dist/cli/interfaz.js +71 -0
- package/dist/cli/interfaz.js.map +1 -0
- package/dist/core/arbol-proyecto.d.ts +18 -0
- package/dist/core/arbol-proyecto.d.ts.map +1 -0
- package/dist/core/arbol-proyecto.js +119 -0
- package/dist/core/arbol-proyecto.js.map +1 -0
- package/dist/core/certificado.d.ts +17 -0
- package/dist/core/certificado.d.ts.map +1 -0
- package/dist/core/certificado.js +49 -0
- package/dist/core/certificado.js.map +1 -0
- package/dist/core/evaluador-ciberseguridad.d.ts +9 -0
- package/dist/core/evaluador-ciberseguridad.d.ts.map +1 -0
- package/dist/core/evaluador-ciberseguridad.js +139 -0
- package/dist/core/evaluador-ciberseguridad.js.map +1 -0
- package/dist/core/evaluador-estilos.d.ts +9 -0
- package/dist/core/evaluador-estilos.d.ts.map +1 -0
- package/dist/core/evaluador-estilos.js +132 -0
- package/dist/core/evaluador-estilos.js.map +1 -0
- package/dist/core/evaluador-licencias.d.ts +10 -0
- package/dist/core/evaluador-licencias.d.ts.map +1 -0
- package/dist/core/evaluador-licencias.js +139 -0
- package/dist/core/evaluador-licencias.js.map +1 -0
- package/dist/core/evaluador-lighthouse.d.ts +5 -0
- package/dist/core/evaluador-lighthouse.d.ts.map +1 -0
- package/dist/core/evaluador-lighthouse.js +78 -0
- package/dist/core/evaluador-lighthouse.js.map +1 -0
- package/dist/core/evaluador-sanitizer.d.ts +5 -0
- package/dist/core/evaluador-sanitizer.d.ts.map +1 -0
- package/dist/core/evaluador-sanitizer.js +109 -0
- package/dist/core/evaluador-sanitizer.js.map +1 -0
- package/dist/core/evaluador-sintaxis.d.ts +37 -0
- package/dist/core/evaluador-sintaxis.d.ts.map +1 -0
- package/dist/core/evaluador-sintaxis.js +372 -0
- package/dist/core/evaluador-sintaxis.js.map +1 -0
- package/dist/core/evaluador-topologia.d.ts +9 -0
- package/dist/core/evaluador-topologia.d.ts.map +1 -0
- package/dist/core/evaluador-topologia.js +86 -0
- package/dist/core/evaluador-topologia.js.map +1 -0
- package/dist/core/evaluador-wp-woo.d.ts +15 -0
- package/dist/core/evaluador-wp-woo.d.ts.map +1 -0
- package/dist/core/evaluador-wp-woo.js +197 -0
- package/dist/core/evaluador-wp-woo.js.map +1 -0
- package/dist/core/generador-reporte-html.d.ts +12 -0
- package/dist/core/generador-reporte-html.d.ts.map +1 -0
- package/dist/core/generador-reporte-html.js +760 -0
- package/dist/core/generador-reporte-html.js.map +1 -0
- package/dist/core/linter-inline-css.d.ts +20 -0
- package/dist/core/linter-inline-css.d.ts.map +1 -0
- package/dist/core/linter-inline-css.js +77 -0
- package/dist/core/linter-inline-css.js.map +1 -0
- package/dist/core/orquestador.d.ts +33 -0
- package/dist/core/orquestador.d.ts.map +1 -0
- package/dist/core/orquestador.js +518 -0
- package/dist/core/orquestador.js.map +1 -0
- package/dist/core/punto-control.d.ts +26 -0
- package/dist/core/punto-control.d.ts.map +1 -0
- package/dist/core/punto-control.js +129 -0
- package/dist/core/punto-control.js.map +1 -0
- package/dist/core/repositorio-sqlite.d.ts +16 -0
- package/dist/core/repositorio-sqlite.d.ts.map +1 -0
- package/dist/core/repositorio-sqlite.js +129 -0
- package/dist/core/repositorio-sqlite.js.map +1 -0
- package/dist/core/types.d.ts +75 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +35 -0
- package/dist/core/types.js.map +1 -0
- package/dist/hooks/guardian-git.d.ts +23 -0
- package/dist/hooks/guardian-git.d.ts.map +1 -0
- package/dist/hooks/guardian-git.js +111 -0
- package/dist/hooks/guardian-git.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/ejecutor.d.ts +19 -0
- package/dist/utils/ejecutor.d.ts.map +1 -0
- package/dist/utils/ejecutor.js +44 -0
- package/dist/utils/ejecutor.js.map +1 -0
- package/package.json +50 -4
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.EvaluadorSintaxisUniversal = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
38
|
+
const arbol_proyecto_js_1 = require("./arbol-proyecto.js");
|
|
39
|
+
/**
|
|
40
|
+
* G22: Diagnóstico Universal de Sintaxis, Delimitadores y Balanceo (Universal Syntax & Delimiter Guard).
|
|
41
|
+
* Analiza estáticamente PHP, CSS/SCSS, JSON, JS/TS, Python y Java sin requerir compiladores externos.
|
|
42
|
+
* Detecta:
|
|
43
|
+
* 1. PHP: Omisión de punto y coma (;) en asignaciones, retornos, llamadas a métodos e instrucciones simples.
|
|
44
|
+
* 2. CSS/SCSS: Omisión de punto y coma (;) entre pares propiedad: valor.
|
|
45
|
+
* 3. JSON: Comas faltantes, trailing commas inválidas y sintaxis corrupta.
|
|
46
|
+
* 4. Universal: Desbalanceo de llaves ({ }), corchetes ([ ]) y paréntesis (( )).
|
|
47
|
+
*/
|
|
48
|
+
class EvaluadorSintaxisUniversal {
|
|
49
|
+
static async auditar(directorioRaiz) {
|
|
50
|
+
const t = Date.now();
|
|
51
|
+
const archivos = await arbol_proyecto_js_1.LectorArbolProyecto.obtenerSnapshot(directorioRaiz);
|
|
52
|
+
const errores = [];
|
|
53
|
+
let archivosAuditados = 0;
|
|
54
|
+
const extensionesSoportadas = new Set([
|
|
55
|
+
".php", ".phtml",
|
|
56
|
+
".css", ".scss",
|
|
57
|
+
".json",
|
|
58
|
+
".js", ".mjs", ".cjs", ".ts", ".tsx",
|
|
59
|
+
".java"
|
|
60
|
+
]);
|
|
61
|
+
const archivosCandidatos = archivos.filter(arch => {
|
|
62
|
+
if (!extensionesSoportadas.has(arch.extension))
|
|
63
|
+
return false;
|
|
64
|
+
const r = arch.rutaRelativa;
|
|
65
|
+
return !(r.includes("vendor/") ||
|
|
66
|
+
r.includes("node_modules/") ||
|
|
67
|
+
r.includes("dist/") ||
|
|
68
|
+
r.includes("target/") ||
|
|
69
|
+
r.includes("checkpoints/") ||
|
|
70
|
+
r.includes("uploads/") ||
|
|
71
|
+
r.includes("cache/"));
|
|
72
|
+
});
|
|
73
|
+
const tamanoLote = 35;
|
|
74
|
+
for (let i = 0; i < archivosCandidatos.length; i += tamanoLote) {
|
|
75
|
+
const lote = archivosCandidatos.slice(i, i + tamanoLote);
|
|
76
|
+
await Promise.all(lote.map(async (arch) => {
|
|
77
|
+
let contenido;
|
|
78
|
+
try {
|
|
79
|
+
contenido = await fs.readFile(arch.rutaAbsoluta, "utf8");
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
archivosAuditados++;
|
|
85
|
+
// 1. Auditoría de Balanceo Universal de Delimitadores ({ }, [ ], ( ))
|
|
86
|
+
this.auditarBalanceo(arch.rutaRelativa, contenido, errores);
|
|
87
|
+
// 2. Auditoría Específica por Lenguaje
|
|
88
|
+
if (arch.extension === ".json") {
|
|
89
|
+
this.auditarJson(arch.rutaRelativa, contenido, errores);
|
|
90
|
+
}
|
|
91
|
+
else if (arch.extension === ".css" || arch.extension === ".scss") {
|
|
92
|
+
this.auditarCss(arch.rutaRelativa, contenido, errores);
|
|
93
|
+
}
|
|
94
|
+
else if (arch.extension === ".php" || arch.extension === ".phtml") {
|
|
95
|
+
this.auditarPhp(arch.rutaRelativa, contenido, errores);
|
|
96
|
+
}
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
if (errores.length > 0) {
|
|
100
|
+
const resumen = errores.slice(0, 3).map(e => `${e.archivo}:${e.linea} [${e.lenguaje}] ${e.mensaje}`).join(" | ");
|
|
101
|
+
return {
|
|
102
|
+
id: "G22",
|
|
103
|
+
nombre: "Diagnóstico Universal de Sintaxis y Delimitadores (Universal Syntax Guard)",
|
|
104
|
+
estado: "rechazada",
|
|
105
|
+
detalle: `Se detectaron ${errores.length} fallas de sintaxis/delimitadores en el proyecto: ${resumen}`,
|
|
106
|
+
evidencia: `${errores.length} errores de sintaxis detectados`,
|
|
107
|
+
tiempoEjecucionMs: Date.now() - t
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
id: "G22",
|
|
112
|
+
nombre: "Diagnóstico Universal de Sintaxis y Delimitadores (Universal Syntax Guard)",
|
|
113
|
+
estado: "aprobada",
|
|
114
|
+
detalle: `Sintaxis y delimitadores limpios en ${archivosAuditados} archivo(s) analizados. Cero omisiones de ';' o delimitadores desbalanceados.`,
|
|
115
|
+
evidencia: `${archivosAuditados} archivos con sintaxis íntegra`,
|
|
116
|
+
tiempoEjecucionMs: Date.now() - t
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Auditoría de JSON nativo
|
|
121
|
+
*/
|
|
122
|
+
static auditarJson(archivo, contenido, errores) {
|
|
123
|
+
if (!contenido.trim())
|
|
124
|
+
return;
|
|
125
|
+
try {
|
|
126
|
+
JSON.parse(contenido);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
let linea = 1;
|
|
130
|
+
const match = err.message.match(/position\s+(\d+)/i);
|
|
131
|
+
if (match && match[1]) {
|
|
132
|
+
const pos = parseInt(match[1], 10);
|
|
133
|
+
linea = contenido.substring(0, pos).split("\n").length;
|
|
134
|
+
}
|
|
135
|
+
errores.push({
|
|
136
|
+
archivo,
|
|
137
|
+
linea,
|
|
138
|
+
lenguaje: "JSON",
|
|
139
|
+
mensaje: `Error de sintaxis JSON: ${err.message}`,
|
|
140
|
+
codigo: "JSON-SYN-01"
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Auditoría de CSS / SCSS: Detección de falta de punto y coma entre propiedades
|
|
146
|
+
*/
|
|
147
|
+
static auditarCss(archivo, contenido, errores) {
|
|
148
|
+
const lineas = contenido.split(/\r?\n/);
|
|
149
|
+
let enComentario = false;
|
|
150
|
+
for (let i = 0; i < lineas.length; i++) {
|
|
151
|
+
let l = lineas[i].trim();
|
|
152
|
+
const num = i + 1;
|
|
153
|
+
// Gestión de comentarios multilínea /* ... */
|
|
154
|
+
if (l.includes("/*"))
|
|
155
|
+
enComentario = true;
|
|
156
|
+
if (enComentario) {
|
|
157
|
+
if (l.includes("*/"))
|
|
158
|
+
enComentario = false;
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
if (l.startsWith("//") || l.startsWith("/*"))
|
|
162
|
+
continue;
|
|
163
|
+
// Detectar pares propiedad: valor
|
|
164
|
+
// Ej: "margin: 10px" sin terminar en ";" o "{" o ","
|
|
165
|
+
if (/^[a-zA-Z\-][a-zA-Z0-9\-]*\s*:\s*[^;{}]+$/.test(l)) {
|
|
166
|
+
// Mirar si la siguiente línea no vacía es otra propiedad o cierre
|
|
167
|
+
let siguientePropiedad = false;
|
|
168
|
+
for (let j = i + 1; j < Math.min(i + 5, lineas.length); j++) {
|
|
169
|
+
const sig = lineas[j].trim();
|
|
170
|
+
if (!sig || sig.startsWith("//") || sig.startsWith("/*"))
|
|
171
|
+
continue;
|
|
172
|
+
if (/^[a-zA-Z\-][a-zA-Z0-9\-]*\s*:/i.test(sig) || sig.startsWith("}")) {
|
|
173
|
+
siguientePropiedad = true;
|
|
174
|
+
}
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
if (siguientePropiedad && !l.endsWith(",") && !l.endsWith("{")) {
|
|
178
|
+
errores.push({
|
|
179
|
+
archivo,
|
|
180
|
+
linea: num,
|
|
181
|
+
lenguaje: "CSS",
|
|
182
|
+
mensaje: `Falta punto y coma (;) al final de la declaración CSS: '${l}'`,
|
|
183
|
+
codigo: "CSS-MISSING-SEMICOLON"
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Auditoría de PHP: Detección de falta de ';' en asignaciones, retornos e instrucciones
|
|
191
|
+
*/
|
|
192
|
+
static auditarPhp(archivo, contenido, errores) {
|
|
193
|
+
const lineas = contenido.split(/\r?\n/);
|
|
194
|
+
let enComentario = false;
|
|
195
|
+
for (let i = 0; i < lineas.length; i++) {
|
|
196
|
+
let l = lineas[i].trim();
|
|
197
|
+
const num = i + 1;
|
|
198
|
+
if (l.includes("/*"))
|
|
199
|
+
enComentario = true;
|
|
200
|
+
if (enComentario) {
|
|
201
|
+
if (l.includes("*/"))
|
|
202
|
+
enComentario = false;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
if (l.startsWith("//") || l.startsWith("#") || l.startsWith("*"))
|
|
206
|
+
continue;
|
|
207
|
+
// Ignorar líneas vacías, aperturas de etiquetas, bloques de control
|
|
208
|
+
if (!l || l === "<?php" || l === "?>" || l === "{" || l === "}" || l.endsWith("{") || l.endsWith(":") || l.endsWith("*/"))
|
|
209
|
+
continue;
|
|
210
|
+
if (/^(if|elseif|else|for|foreach|while|switch|declare|case|default|function|class|interface|trait|namespace|abstract|final)\b/i.test(l))
|
|
211
|
+
continue;
|
|
212
|
+
// Si es una asignación, retorno, llamada o declaración que no termina en ; ni { ni , ni . ni :
|
|
213
|
+
const esInstruccionTerminal = /^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\s*=(?!=)/.test(l) || // $var = ...
|
|
214
|
+
/^return\b/.test(l) || // return ...
|
|
215
|
+
/^throw\b/.test(l) || // throw ...
|
|
216
|
+
/^echo\b/.test(l) || // echo ...
|
|
217
|
+
/^use\b/.test(l) || // use ...
|
|
218
|
+
/^(?:public|private|protected|static|var)\s+\$[a-zA-Z_]/.test(l); // propiedades de clase
|
|
219
|
+
if (esInstruccionTerminal) {
|
|
220
|
+
if (!l.endsWith(";") && !l.endsWith("{") && !l.endsWith(",") && !l.endsWith(".") && !l.endsWith(":") && !l.endsWith("?>")) {
|
|
221
|
+
// Mirar si la instrucción continúa en multilínea (ej. queries SQL, arrays, llamadas encadenadas, strings heredoc)
|
|
222
|
+
let esContinuacion = false;
|
|
223
|
+
for (let j = i + 1; j < Math.min(i + 150, lineas.length); j++) {
|
|
224
|
+
const sig = lineas[j].trim();
|
|
225
|
+
if (!sig || sig.startsWith("//") || sig.startsWith("#") || sig.startsWith("/*") || sig.startsWith("*"))
|
|
226
|
+
continue;
|
|
227
|
+
if (sig.startsWith(".") ||
|
|
228
|
+
sig.startsWith("->") ||
|
|
229
|
+
sig.startsWith("?") ||
|
|
230
|
+
sig.startsWith(":") ||
|
|
231
|
+
sig.startsWith("&&") ||
|
|
232
|
+
sig.startsWith("||") ||
|
|
233
|
+
sig.endsWith(");") ||
|
|
234
|
+
sig.endsWith("];") ||
|
|
235
|
+
sig.endsWith(";")) {
|
|
236
|
+
esContinuacion = true;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
if (/^(return|\$[a-zA-Z_\x7f-\xff]|echo|throw|function|class|if|switch|case|default)\b/.test(sig)) {
|
|
240
|
+
// Si no termina en ';' o 'array(' o '[' es otra instrucción separada
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (!esContinuacion) {
|
|
245
|
+
errores.push({
|
|
246
|
+
archivo,
|
|
247
|
+
linea: num,
|
|
248
|
+
lenguaje: "PHP",
|
|
249
|
+
mensaje: `Falta punto y coma (;) al final de la instrucción: '${l.substring(0, 50)}'`,
|
|
250
|
+
codigo: "PHP-MISSING-SEMICOLON"
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Auditoría de Balanceo Universal de Llaves, Corchetes y Paréntesis
|
|
259
|
+
*/
|
|
260
|
+
static auditarBalanceo(archivo, contenido, errores) {
|
|
261
|
+
const pila = [];
|
|
262
|
+
const lineas = contenido.split(/\r?\n/);
|
|
263
|
+
let enString = null;
|
|
264
|
+
let enComentarioLinea = false;
|
|
265
|
+
let enComentarioBloque = false;
|
|
266
|
+
for (let i = 0; i < lineas.length; i++) {
|
|
267
|
+
const texto = lineas[i];
|
|
268
|
+
const numLinea = i + 1;
|
|
269
|
+
enComentarioLinea = false;
|
|
270
|
+
for (let j = 0; j < texto.length; j++) {
|
|
271
|
+
const c = texto[j];
|
|
272
|
+
const cSiguiente = texto[j + 1];
|
|
273
|
+
if (enComentarioBloque) {
|
|
274
|
+
if (c === "*" && cSiguiente === "/") {
|
|
275
|
+
enComentarioBloque = false;
|
|
276
|
+
j++;
|
|
277
|
+
}
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
if (enComentarioLinea)
|
|
281
|
+
break;
|
|
282
|
+
if (enString) {
|
|
283
|
+
if (c === "\\") {
|
|
284
|
+
j++; // escapar
|
|
285
|
+
}
|
|
286
|
+
else if (c === enString) {
|
|
287
|
+
enString = null;
|
|
288
|
+
}
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// Detección de comentarios
|
|
292
|
+
if (c === "/" && cSiguiente === "/") {
|
|
293
|
+
enComentarioLinea = true;
|
|
294
|
+
break;
|
|
295
|
+
}
|
|
296
|
+
if (c === "/" && cSiguiente === "*") {
|
|
297
|
+
enComentarioBloque = true;
|
|
298
|
+
j++;
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
if (c === "#" && (archivo.endsWith(".php") || archivo.endsWith(".py") || archivo.endsWith(".sh"))) {
|
|
302
|
+
enComentarioLinea = true;
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
// Detección de expresiones regulares en JS/TS/PHP: /regex/
|
|
306
|
+
if (c === "/" && !enString && !enComentarioLinea && !enComentarioBloque) {
|
|
307
|
+
// Si el slash va seguido de [^...] o caracteres de regex hasta otro /
|
|
308
|
+
let finRegex = -1;
|
|
309
|
+
for (let k = j + 1; k < texto.length; k++) {
|
|
310
|
+
if (texto[k] === "\\") {
|
|
311
|
+
k++;
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
if (texto[k] === "/") {
|
|
315
|
+
finRegex = k;
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (finRegex !== -1) {
|
|
320
|
+
j = finRegex;
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// Strings
|
|
325
|
+
if (c === '"' || c === "'" || c === "`") {
|
|
326
|
+
enString = c;
|
|
327
|
+
continue;
|
|
328
|
+
}
|
|
329
|
+
// Delimitadores de apertura
|
|
330
|
+
if (c === "{" || c === "[" || c === "(") {
|
|
331
|
+
pila.push({ char: c, linea: numLinea });
|
|
332
|
+
}
|
|
333
|
+
else if (c === "}" || c === "]" || c === ")") {
|
|
334
|
+
if (pila.length === 0) {
|
|
335
|
+
errores.push({
|
|
336
|
+
archivo,
|
|
337
|
+
linea: numLinea,
|
|
338
|
+
lenguaje: "UNIVERSAL",
|
|
339
|
+
mensaje: `Delimitador de cierre inesperado '${c}' sin apertura previa correspondiente.`,
|
|
340
|
+
codigo: "SYN-UNMATCHED-CLOSE"
|
|
341
|
+
});
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const top = pila.pop();
|
|
345
|
+
const pares = { "}": "{", "]": "[", ")": "(" };
|
|
346
|
+
if (top.char !== pares[c]) {
|
|
347
|
+
errores.push({
|
|
348
|
+
archivo,
|
|
349
|
+
linea: numLinea,
|
|
350
|
+
lenguaje: "UNIVERSAL",
|
|
351
|
+
mensaje: `Delimitador no coincidente: se abrió '${top.char}' en línea ${top.linea} pero se intentó cerrar con '${c}' en línea ${numLinea}.`,
|
|
352
|
+
codigo: "SYN-MISMATCHED-PAIR"
|
|
353
|
+
});
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
if (pila.length > 0) {
|
|
360
|
+
const pendiente = pila[pila.length - 1];
|
|
361
|
+
errores.push({
|
|
362
|
+
archivo,
|
|
363
|
+
linea: pendiente.linea,
|
|
364
|
+
lenguaje: "UNIVERSAL",
|
|
365
|
+
mensaje: `Delimitador sin cerrar: '${pendiente.char}' abierto en la línea ${pendiente.linea} nunca fue cerrado al final del archivo.`,
|
|
366
|
+
codigo: "SYN-UNCLOSED-DELIMITER"
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
exports.EvaluadorSintaxisUniversal = EvaluadorSintaxisUniversal;
|
|
372
|
+
//# sourceMappingURL=evaluador-sintaxis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-sintaxis.js","sourceRoot":"","sources":["../../src/core/evaluador-sintaxis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RegistroCompuerta } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* G20: Topología de Entornos, Aislamiento de Red y Cero Conexiones Fantasma (Topology & Zero-Cross Contamination).
|
|
4
|
+
* Optimizado con LectorArbolProyecto (VFS Snapshot en memoria) para cero redundancia de I/O.
|
|
5
|
+
*/
|
|
6
|
+
export declare class EvaluadorTopologia {
|
|
7
|
+
static auditar(directorioRaiz: string): Promise<RegistroCompuerta>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=evaluador-topologia.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-topologia.d.ts","sourceRoot":"","sources":["../../src/core/evaluador-topologia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI/C;;;GAGG;AACH,qBAAa,kBAAkB;WACT,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA+ChF"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.EvaluadorTopologia = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
38
|
+
const arbol_proyecto_js_1 = require("./arbol-proyecto.js");
|
|
39
|
+
/**
|
|
40
|
+
* G20: Topología de Entornos, Aislamiento de Red y Cero Conexiones Fantasma (Topology & Zero-Cross Contamination).
|
|
41
|
+
* Optimizado con LectorArbolProyecto (VFS Snapshot en memoria) para cero redundancia de I/O.
|
|
42
|
+
*/
|
|
43
|
+
class EvaluadorTopologia {
|
|
44
|
+
static async auditar(directorioRaiz) {
|
|
45
|
+
const t = Date.now();
|
|
46
|
+
let hardcodedLocalhost = 0;
|
|
47
|
+
const extensiones = [".ts", ".js", ".astro", ".tsx", ".jsx", ".php", ".py"];
|
|
48
|
+
const archivos = await arbol_proyecto_js_1.LectorArbolProyecto.filtrarPorExtension(directorioRaiz, extensiones);
|
|
49
|
+
await Promise.all(archivos.map(async (arch) => {
|
|
50
|
+
if (arch.rutaRelativa.includes('test') ||
|
|
51
|
+
arch.rutaRelativa.includes('spec') ||
|
|
52
|
+
arch.rutaRelativa.includes('evaluador') ||
|
|
53
|
+
arch.rutaRelativa.includes('vite.config')) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const raw = await fs.readFile(arch.rutaAbsoluta, "utf8");
|
|
58
|
+
const matches = raw.match(/https?:\/\/(localhost|127\.0\.0\.1):\d+/g);
|
|
59
|
+
if (matches) {
|
|
60
|
+
hardcodedLocalhost += matches.length;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch { }
|
|
64
|
+
}));
|
|
65
|
+
if (hardcodedLocalhost > 5) {
|
|
66
|
+
return {
|
|
67
|
+
id: "G20",
|
|
68
|
+
nombre: "Topologia de Entornos, Aislamiento de Red y Cero Conexiones Fantasma (Topology Guard)",
|
|
69
|
+
estado: "rechazada",
|
|
70
|
+
detalle: `Contaminación de entorno: Se detectaron ${hardcodedLocalhost} referencias hardcodeadas a localhost/127.0.0.1 en código fuente de producción. Deben parametrizarse vía variables de entorno.`,
|
|
71
|
+
evidencia: `${hardcodedLocalhost} endpoints localhost detectados`,
|
|
72
|
+
tiempoEjecucionMs: Date.now() - t
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
id: "G20",
|
|
77
|
+
nombre: "Topologia de Entornos, Aislamiento de Red y Cero Conexiones Fantasma (Topology Guard)",
|
|
78
|
+
estado: "aprobada",
|
|
79
|
+
detalle: `Topología de red conforme. Aislamiento de infraestructura verificado (${hardcodedLocalhost} referencias locales dentro del margen de desarrollo tolerado).`,
|
|
80
|
+
evidencia: `Aislamiento OK (${hardcodedLocalhost} ref)`,
|
|
81
|
+
tiempoEjecucionMs: Date.now() - t
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.EvaluadorTopologia = EvaluadorTopologia;
|
|
86
|
+
//# sourceMappingURL=evaluador-topologia.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-topologia.js","sourceRoot":"","sources":["../../src/core/evaluador-topologia.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,qDAAuC;AACvC,2DAA0D;AAE1D;;;GAGG;AACH,MAAa,kBAAkB;IACtB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAsB;QAChD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAE5E,MAAM,QAAQ,GAAG,MAAM,uCAAmB,CAAC,mBAAmB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QAE5F,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC1B,IACE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACvC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EACzC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBACzD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBACtE,IAAI,OAAO,EAAE,CAAC;oBACZ,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;gBACvC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,uFAAuF;gBAC/F,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,2CAA2C,kBAAkB,gIAAgI;gBACtM,SAAS,EAAE,GAAG,kBAAkB,iCAAiC;gBACjE,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;aAClC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,uFAAuF;YAC/F,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,yEAAyE,kBAAkB,iEAAiE;YACrK,SAAS,EAAE,mBAAmB,kBAAkB,OAAO;YACvD,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;SAClC,CAAC;IACJ,CAAC;CACF;AAhDD,gDAgDC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RegistroCompuerta } from "./types.js";
|
|
2
|
+
export interface ViolacionWpWoo {
|
|
3
|
+
readonly archivo: string;
|
|
4
|
+
readonly linea: number;
|
|
5
|
+
readonly regla: string;
|
|
6
|
+
readonly mensaje: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* G21: Cumplimiento y Buenas Prácticas Oficiales WordPress & WooCommerce (WP & WC Core Compliance Guard).
|
|
10
|
+
* Audita apego a WordPress Coding Standards (WPCS) y WooCommerce HPOS/CRUD Guidelines.
|
|
11
|
+
*/
|
|
12
|
+
export declare class EvaluadorWpWoo {
|
|
13
|
+
static auditar(directorioRaiz: string): Promise<RegistroCompuerta>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=evaluador-wp-woo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-wp-woo.d.ts","sourceRoot":"","sources":["../../src/core/evaluador-wp-woo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,cAAc;WACL,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAwKhF"}
|