@ingcrea/aumic-puf 0.0.0-stage → 3.1.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/MANIFEST.es.md +172 -0
- package/MANIFEST.md +64 -0
- package/PUF-15.md +118 -0
- package/PUF_G16_Lighthouse.md +70 -0
- package/README.es.md +256 -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 +259 -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 +77 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +41 -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 +53 -4
- package/puf-github-action.yml +30 -0
|
@@ -0,0 +1,197 @@
|
|
|
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.EvaluadorWpWoo = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
38
|
+
const arbol_proyecto_js_1 = require("./arbol-proyecto.js");
|
|
39
|
+
/**
|
|
40
|
+
* G21: Cumplimiento y Buenas Prácticas Oficiales WordPress & WooCommerce (WP & WC Core Compliance Guard).
|
|
41
|
+
* Audita apego a WordPress Coding Standards (WPCS) y WooCommerce HPOS/CRUD Guidelines.
|
|
42
|
+
*/
|
|
43
|
+
class EvaluadorWpWoo {
|
|
44
|
+
static async auditar(directorioRaiz) {
|
|
45
|
+
const t = Date.now();
|
|
46
|
+
const archivos = await arbol_proyecto_js_1.LectorArbolProyecto.obtenerSnapshot(directorioRaiz);
|
|
47
|
+
// Detección heurística de ecosistema WordPress / WooCommerce
|
|
48
|
+
const esWordPress = archivos.some(a => a.rutaRelativa.endsWith("functions.php") ||
|
|
49
|
+
a.rutaRelativa.endsWith("wp-config.php") ||
|
|
50
|
+
a.rutaRelativa.includes("wp-content/") ||
|
|
51
|
+
a.rutaRelativa.includes("_ic-megazone-woo"));
|
|
52
|
+
const archivosPhp = archivos.filter(a => a.extension === ".php");
|
|
53
|
+
if (!esWordPress && archivosPhp.length === 0) {
|
|
54
|
+
return {
|
|
55
|
+
id: "G21",
|
|
56
|
+
nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
|
|
57
|
+
estado: "omitida",
|
|
58
|
+
detalle: "No se detectó estructura ni dependencias de WordPress / WooCommerce. Compuerta omitida.",
|
|
59
|
+
evidencia: "Entorno no WordPress",
|
|
60
|
+
tiempoEjecucionMs: Date.now() - t
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
let detectadoWpTokens = esWordPress;
|
|
64
|
+
if (!detectadoWpTokens) {
|
|
65
|
+
for (const arch of archivosPhp.slice(0, 10)) {
|
|
66
|
+
try {
|
|
67
|
+
const raw = await fs.readFile(arch.rutaAbsoluta, "utf8");
|
|
68
|
+
if (raw.includes("add_action(") || raw.includes("add_filter(") || raw.includes("wc_get_order") || raw.includes("wp_send_json")) {
|
|
69
|
+
detectadoWpTokens = true;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch { }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (!detectadoWpTokens) {
|
|
77
|
+
return {
|
|
78
|
+
id: "G21",
|
|
79
|
+
nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
|
|
80
|
+
estado: "omitida",
|
|
81
|
+
detalle: "Proyecto PHP estándar sin hooks o APIs nativas de WordPress/WooCommerce.",
|
|
82
|
+
evidencia: "Proyecto PHP general",
|
|
83
|
+
tiempoEjecucionMs: Date.now() - t
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const violaciones = [];
|
|
87
|
+
let cuentaArchivosWp = 0;
|
|
88
|
+
let tieneWooCommerce = false;
|
|
89
|
+
let declaraHpos = false;
|
|
90
|
+
for (const arch of archivosPhp) {
|
|
91
|
+
if (arch.rutaRelativa.includes("vendor/") || arch.rutaRelativa.includes("tests/"))
|
|
92
|
+
continue;
|
|
93
|
+
cuentaArchivosWp++;
|
|
94
|
+
let contenido;
|
|
95
|
+
try {
|
|
96
|
+
contenido = await fs.readFile(arch.rutaAbsoluta, "utf8");
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (contenido.includes("custom_order_tables") || contenido.includes("declare_compatibility")) {
|
|
102
|
+
declaraHpos = true;
|
|
103
|
+
}
|
|
104
|
+
if (contenido.includes("WC_") || contenido.includes("wc_") || contenido.includes("woocommerce")) {
|
|
105
|
+
tieneWooCommerce = true;
|
|
106
|
+
}
|
|
107
|
+
const lineas = contenido.split(/\r?\n/);
|
|
108
|
+
for (let i = 0; i < lineas.length; i++) {
|
|
109
|
+
const lineaNum = i + 1;
|
|
110
|
+
const texto = lineas[i] || "";
|
|
111
|
+
const lineaLimpia = texto.trim();
|
|
112
|
+
// Ignorar comentarios
|
|
113
|
+
if (lineaLimpia.startsWith("//") || lineaLimpia.startsWith("#") || lineaLimpia.startsWith("*"))
|
|
114
|
+
continue;
|
|
115
|
+
// Regla 1: WordPress Security - Acceso a superglobales sin sanitizar
|
|
116
|
+
if (/(?:\$_GET|\$_POST|\$_REQUEST)\[.+\]/.test(texto)) {
|
|
117
|
+
const sanitizado = /(?:sanitize_text_field|sanitize_key|absint|intval|sanitize_email|esc_url_raw|wp_unslash)\s*\(/.test(texto) ||
|
|
118
|
+
/array_map\s*\(\s*['"](?:sanitize_text_field|intval|absint)['"]/.test(texto);
|
|
119
|
+
const issetSolo = /isset\s*\(|empty\s*\(/.test(texto);
|
|
120
|
+
if (!sanitizado && !issetSolo) {
|
|
121
|
+
violaciones.push({
|
|
122
|
+
archivo: arch.rutaRelativa,
|
|
123
|
+
linea: lineaNum,
|
|
124
|
+
regla: "WP-SEC-01 (Sanitización)",
|
|
125
|
+
mensaje: "Acceso directo a superglobal ($_POST/$_GET/$_REQUEST) sin función canónica de sanitización (sanitize_text_field, absint, esc_url_raw)."
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Regla 2: WordPress Security - Consultas directas a WPDB sin prepare
|
|
130
|
+
// Detecta consultas donde el payload SQL concatena variables de usuario (. $var) o interpola dentro del string comillas
|
|
131
|
+
const contieneLlamadaWpdb = /\$wpdb->(?:query|get_results|get_row|get_var)\s*\(/i.test(texto);
|
|
132
|
+
if (contieneLlamadaWpdb && !texto.includes("$wpdb->prepare") && !texto.includes("prepare(")) {
|
|
133
|
+
// Extraer lo que está dentro del paréntesis de la llamada a wpdb
|
|
134
|
+
const matchCall = texto.match(/\$wpdb->(?:query|get_results|get_row|get_var)\s*\((.+)/i);
|
|
135
|
+
if (matchCall && matchCall[1]) {
|
|
136
|
+
const cuerpoSql = matchCall[1];
|
|
137
|
+
// Concatena variable externa con punto: . $variable
|
|
138
|
+
const concatenaVar = /\.\s*\$[a-zA-Z_]/i.test(cuerpoSql);
|
|
139
|
+
// Interpola variable que no sea tabla canónica del core: $var o {$var}
|
|
140
|
+
const interpolaVar = /(?<!\{?wpdb->(?:prefix|posts|postmeta|users|usermeta|options|terms|term_taxonomy|term_relationships)\b)\$[a-zA-Z_]/i.test(cuerpoSql.replace(/\$wpdb->(?:prefix|posts|postmeta|users|usermeta|options|terms|term_taxonomy|term_relationships)\b/g, ''));
|
|
141
|
+
if (concatenaVar || interpolaVar) {
|
|
142
|
+
violaciones.push({
|
|
143
|
+
archivo: arch.rutaRelativa,
|
|
144
|
+
linea: lineaNum,
|
|
145
|
+
regla: "WP-SEC-02 (SQL Injection)",
|
|
146
|
+
mensaje: "Consulta directa a $wpdb construida con variables dinámicas no sanitizadas sin $wpdb->prepare(). Vulnerabilidad de Inyección SQL."
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Regla 3: WooCommerce CRUD & HPOS - Acceso a get_post_meta para pedidos
|
|
152
|
+
if (/get_post_meta\s*\(\s*\$order(?:->get_id\(\)|\b)/i.test(texto) || /get_post_meta\s*\(\s*\$order_id\s*,\s*["']_shipping_/i.test(texto)) {
|
|
153
|
+
violaciones.push({
|
|
154
|
+
archivo: arch.rutaRelativa,
|
|
155
|
+
linea: lineaNum,
|
|
156
|
+
regla: "WC-HPOS-01 (CRUD Mandatorio)",
|
|
157
|
+
mensaje: "Uso obsoleto de get_post_meta() en órdenes. Incumple HPOS. Usar $order->get_meta() o métodos CRUD canónicos de WC_Order."
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
// Regla 4: WooCommerce Core - Acceso directo a propiedades obsoletas
|
|
161
|
+
if (/\$order->(?:id|status|total|shipping_postcode|billing_email)\b/i.test(texto)) {
|
|
162
|
+
violaciones.push({
|
|
163
|
+
archivo: arch.rutaRelativa,
|
|
164
|
+
linea: lineaNum,
|
|
165
|
+
regla: "WC-CORE-01 (Propiedades Obsoletas)",
|
|
166
|
+
mensaje: "Acceso directo a propiedades privadas de WC_Order obsoletas desde WooCommerce 3.0. Reemplazar por getters canónicos (ej. $order->get_id(), $order->get_status())."
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (violaciones.length > 0) {
|
|
172
|
+
const resumen = violaciones.slice(0, 3).map(v => `${v.archivo}:${v.linea} [${v.regla}] ${v.mensaje}`).join(" | ");
|
|
173
|
+
return {
|
|
174
|
+
id: "G21",
|
|
175
|
+
nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
|
|
176
|
+
estado: "rechazada",
|
|
177
|
+
detalle: `Se detectaron ${violaciones.length} desviaciones de la documentación oficial de WP/WC: ${resumen}`,
|
|
178
|
+
evidencia: `${violaciones.length} no conformidades oficiales detectadas`,
|
|
179
|
+
tiempoEjecucionMs: Date.now() - t
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
let detalleAprobado = `Auditoría oficial aprobada en ${cuentaArchivosWp} archivo(s) PHP. Cero vulnerabilidades WPCS y compatibilidad con CRUD/HPOS verificada.`;
|
|
183
|
+
if (tieneWooCommerce) {
|
|
184
|
+
detalleAprobado += declaraHpos ? " Compatibilidad formal HPOS declarada." : " Métodos CRUD de WC_Order respetados.";
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
id: "G21",
|
|
188
|
+
nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
|
|
189
|
+
estado: "aprobada",
|
|
190
|
+
detalle: detalleAprobado,
|
|
191
|
+
evidencia: `${cuentaArchivosWp} archivos auditados conforme a WP/WC Core`,
|
|
192
|
+
tiempoEjecucionMs: Date.now() - t
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.EvaluadorWpWoo = EvaluadorWpWoo;
|
|
197
|
+
//# sourceMappingURL=evaluador-wp-woo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-wp-woo.js","sourceRoot":"","sources":["../../src/core/evaluador-wp-woo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file generador-reporte-html.ts
|
|
3
|
+
* @description Generador visual del Reporte Forense HTML Soberano para el Protocolo PUF.
|
|
4
|
+
* Diseño visual idéntico y de alta fidelidad basado en el estándar AUM-IC Inspector Forense.
|
|
5
|
+
* Incluye SVG Gauge animado, tarjetas KPI con iconografía y bordes, tabla forense detallada.
|
|
6
|
+
* Estándar AUM-IC 7:2026.
|
|
7
|
+
*/
|
|
8
|
+
import type { ResultadoAuditoria } from './types.js';
|
|
9
|
+
export declare class GeneradorReporteHtml {
|
|
10
|
+
static generar(resultado: ResultadoAuditoria, rutaDestino: string): Promise<string>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=generador-reporte-html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generador-reporte-html.d.ts","sourceRoot":"","sources":["../../src/core/generador-reporte-html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,oBAAoB;WACX,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA8sBjG"}
|