@sn4p.dev/mucv 0.5.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/README.md +126 -0
- package/dist/core/elementor-parser.d.ts +22 -0
- package/dist/core/elementor-parser.d.ts.map +1 -0
- package/dist/core/elementor-parser.js +186 -0
- package/dist/core/elementor-parser.js.map +1 -0
- package/dist/core/html-parser.d.ts +27 -0
- package/dist/core/html-parser.d.ts.map +1 -0
- package/dist/core/html-parser.js +247 -0
- package/dist/core/html-parser.js.map +1 -0
- package/dist/core/jsx-parser.d.ts +22 -0
- package/dist/core/jsx-parser.d.ts.map +1 -0
- package/dist/core/jsx-parser.js +261 -0
- package/dist/core/jsx-parser.js.map +1 -0
- package/dist/core/mapper.d.ts +52 -0
- package/dist/core/mapper.d.ts.map +1 -0
- package/dist/core/mapper.js +141 -0
- package/dist/core/mapper.js.map +1 -0
- package/dist/core/normalizer.d.ts +57 -0
- package/dist/core/normalizer.d.ts.map +1 -0
- package/dist/core/normalizer.js +285 -0
- package/dist/core/normalizer.js.map +1 -0
- package/dist/core/optimizer.d.ts +21 -0
- package/dist/core/optimizer.d.ts.map +1 -0
- package/dist/core/optimizer.js +75 -0
- package/dist/core/optimizer.js.map +1 -0
- package/dist/core/parse-result.d.ts +10 -0
- package/dist/core/parse-result.d.ts.map +1 -0
- package/dist/core/parse-result.js +6 -0
- package/dist/core/parse-result.js.map +1 -0
- package/dist/core/vir.d.ts +136 -0
- package/dist/core/vir.d.ts.map +1 -0
- package/dist/core/vir.js +9 -0
- package/dist/core/vir.js.map +1 -0
- package/dist/generators/style-serializer.d.ts +25 -0
- package/dist/generators/style-serializer.d.ts.map +1 -0
- package/dist/generators/style-serializer.js +129 -0
- package/dist/generators/style-serializer.js.map +1 -0
- package/dist/generators/to-elementor.d.ts +13 -0
- package/dist/generators/to-elementor.d.ts.map +1 -0
- package/dist/generators/to-elementor.js +150 -0
- package/dist/generators/to-elementor.js.map +1 -0
- package/dist/generators/to-html-css.d.ts +22 -0
- package/dist/generators/to-html-css.d.ts.map +1 -0
- package/dist/generators/to-html-css.js +127 -0
- package/dist/generators/to-html-css.js.map +1 -0
- package/dist/generators/to-react.d.ts +22 -0
- package/dist/generators/to-react.d.ts.map +1 -0
- package/dist/generators/to-react.js +123 -0
- package/dist/generators/to-react.js.map +1 -0
- package/dist/generators/to-svelte.d.ts +15 -0
- package/dist/generators/to-svelte.d.ts.map +1 -0
- package/dist/generators/to-svelte.js +105 -0
- package/dist/generators/to-svelte.js.map +1 -0
- package/dist/generators/to-vue.d.ts +17 -0
- package/dist/generators/to-vue.d.ts.map +1 -0
- package/dist/generators/to-vue.js +108 -0
- package/dist/generators/to-vue.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +228 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/input.schema.d.ts +245 -0
- package/dist/schemas/input.schema.d.ts.map +1 -0
- package/dist/schemas/input.schema.js +66 -0
- package/dist/schemas/input.schema.js.map +1 -0
- package/dist/schemas/vir.schema.d.ts +1786 -0
- package/dist/schemas/vir.schema.d.ts.map +1 -0
- package/dist/schemas/vir.schema.js +201 -0
- package/dist/schemas/vir.schema.js.map +1 -0
- package/dist/tools/convert-design.d.ts +40 -0
- package/dist/tools/convert-design.d.ts.map +1 -0
- package/dist/tools/convert-design.js +106 -0
- package/dist/tools/convert-design.js.map +1 -0
- package/dist/tools/validate-vir.d.ts +18 -0
- package/dist/tools/validate-vir.d.ts.map +1 -0
- package/dist/tools/validate-vir.js +32 -0
- package/dist/tools/validate-vir.js.map +1 -0
- package/dist/tools/wp-connector.d.ts +55 -0
- package/dist/tools/wp-connector.d.ts.map +1 -0
- package/dist/tools/wp-connector.js +146 -0
- package/dist/tools/wp-connector.js.map +1 -0
- package/dist/tools/wp-tools.d.ts +51 -0
- package/dist/tools/wp-tools.d.ts.map +1 -0
- package/dist/tools/wp-tools.js +126 -0
- package/dist/tools/wp-tools.js.map +1 -0
- package/dist/utils/errors.d.ts +35 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +67 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/id-generator.d.ts +27 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +43 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +19 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metrics.d.ts +30 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +50 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +25 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +41 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/url-validator.d.ts +14 -0
- package/dist/utils/url-validator.d.ts.map +1 -0
- package/dist/utils/url-validator.js +37 -0
- package/dist/utils/url-validator.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MUCV — Normalizer
|
|
3
|
+
* Funciones de normalización de estilos y contenido.
|
|
4
|
+
* Los parsers las usan para producir StyleConfig y ContentConfig
|
|
5
|
+
* compatibles con el schema Zod del VIR.
|
|
6
|
+
*
|
|
7
|
+
* @see docs/VIR-SPEC.md §3
|
|
8
|
+
*/
|
|
9
|
+
// ─── Valores de tamaño ────────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* Normaliza un valor de tamaño de Elementor `{ size, unit }` a string CSS.
|
|
12
|
+
* @example normalizeSizeValue({ size: 48, unit: 'px' }) → "48px"
|
|
13
|
+
*/
|
|
14
|
+
export function normalizeSizeValue(raw) {
|
|
15
|
+
if (raw === null || raw === undefined)
|
|
16
|
+
return undefined;
|
|
17
|
+
if (typeof raw === 'string' && raw.trim() !== '')
|
|
18
|
+
return raw.trim();
|
|
19
|
+
if (typeof raw === 'number')
|
|
20
|
+
return `${raw}px`;
|
|
21
|
+
if (typeof raw === 'object' && raw !== null) {
|
|
22
|
+
const obj = raw;
|
|
23
|
+
const size = obj['size'];
|
|
24
|
+
const unit = obj['unit'];
|
|
25
|
+
if (typeof size === 'number' && size !== 0 && typeof unit === 'string') {
|
|
26
|
+
return `${size}${unit}`;
|
|
27
|
+
}
|
|
28
|
+
if (typeof size === 'number' && size !== 0)
|
|
29
|
+
return `${size}px`;
|
|
30
|
+
}
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
// ─── BoxModel ─────────────────────────────────────────────────────────────────
|
|
34
|
+
/**
|
|
35
|
+
* Normaliza un objeto de Elementor con propiedades top/right/bottom/left a BoxModel.
|
|
36
|
+
* Soporta el formato `{ top, right, bottom, left, unit }` de Elementor.
|
|
37
|
+
*/
|
|
38
|
+
export function normalizeBoxModel(raw) {
|
|
39
|
+
if (raw === null || raw === undefined)
|
|
40
|
+
return undefined;
|
|
41
|
+
if (typeof raw !== 'object')
|
|
42
|
+
return undefined;
|
|
43
|
+
const obj = raw;
|
|
44
|
+
const unit = typeof obj['unit'] === 'string' ? obj['unit'] : 'px';
|
|
45
|
+
const sides = ['top', 'right', 'bottom', 'left'];
|
|
46
|
+
const result = {};
|
|
47
|
+
let hasAny = false;
|
|
48
|
+
for (const side of sides) {
|
|
49
|
+
const val = obj[side];
|
|
50
|
+
if (val !== undefined && val !== '' && val !== null) {
|
|
51
|
+
const num = typeof val === 'number' ? val : parseFloat(String(val));
|
|
52
|
+
if (!isNaN(num)) {
|
|
53
|
+
result[side] = `${num}${unit}`;
|
|
54
|
+
hasAny = true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!hasAny)
|
|
59
|
+
return undefined;
|
|
60
|
+
// Si todos los lados son iguales, usar `all` como shorthand
|
|
61
|
+
if (result.top !== undefined &&
|
|
62
|
+
result.top === result.right &&
|
|
63
|
+
result.top === result.bottom &&
|
|
64
|
+
result.top === result.left) {
|
|
65
|
+
return { all: result.top };
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
// ─── Colores ──────────────────────────────────────────────────────────────────
|
|
70
|
+
/**
|
|
71
|
+
* Normaliza un valor de color a string CSS.
|
|
72
|
+
* Acepta: hex (#fff, #ffffff), rgb(), rgba(), nombres CSS, variables CSS.
|
|
73
|
+
* Expande hex corto #fff → #ffffff.
|
|
74
|
+
*/
|
|
75
|
+
export function normalizeColor(raw) {
|
|
76
|
+
if (typeof raw !== 'string')
|
|
77
|
+
return undefined;
|
|
78
|
+
const color = raw.trim();
|
|
79
|
+
if (color === '')
|
|
80
|
+
return undefined;
|
|
81
|
+
// Expandir hex corto: #abc → #aabbcc
|
|
82
|
+
if (/^#[0-9a-fA-F]{3}$/.test(color)) {
|
|
83
|
+
const r = color[1];
|
|
84
|
+
const g = color[2];
|
|
85
|
+
const b = color[3];
|
|
86
|
+
return `#${r}${r}${g}${g}${b}${b}`.toLowerCase();
|
|
87
|
+
}
|
|
88
|
+
// Normalizar hex completo a minúsculas
|
|
89
|
+
if (/^#[0-9a-fA-F]{6,8}$/.test(color)) {
|
|
90
|
+
return color.toLowerCase();
|
|
91
|
+
}
|
|
92
|
+
return color;
|
|
93
|
+
}
|
|
94
|
+
// ─── Tipografía ───────────────────────────────────────────────────────────────
|
|
95
|
+
/**
|
|
96
|
+
* Extrae y normaliza la configuración tipográfica de los settings de Elementor.
|
|
97
|
+
*/
|
|
98
|
+
export function normalizeTypographyFromElementor(settings) {
|
|
99
|
+
const fontSize = normalizeSizeValue(settings['typography_font_size']);
|
|
100
|
+
const fontFamily = typeof settings['typography_font_family'] === 'string'
|
|
101
|
+
? settings['typography_font_family']
|
|
102
|
+
: undefined;
|
|
103
|
+
const fontWeight = settings['typography_font_weight'] !== undefined
|
|
104
|
+
? String(settings['typography_font_weight'])
|
|
105
|
+
: undefined;
|
|
106
|
+
const lineHeight = normalizeSizeValue(settings['typography_line_height']);
|
|
107
|
+
const letterSpacing = normalizeSizeValue(settings['typography_letter_spacing']);
|
|
108
|
+
const textAlign = normalizeTextAlign(settings['align'] ?? settings['text_align']);
|
|
109
|
+
const textTransform = normalizeTextTransform(settings['typography_text_transform']);
|
|
110
|
+
const textDecoration = normalizeTextDecoration(settings['typography_text_decoration']);
|
|
111
|
+
const color = normalizeColor(settings['title_color'] ?? settings['text_color'] ?? settings['color']);
|
|
112
|
+
const result = {};
|
|
113
|
+
if (fontSize)
|
|
114
|
+
result.fontSize = fontSize;
|
|
115
|
+
if (fontFamily)
|
|
116
|
+
result.fontFamily = fontFamily;
|
|
117
|
+
if (fontWeight)
|
|
118
|
+
result.fontWeight = fontWeight;
|
|
119
|
+
if (lineHeight)
|
|
120
|
+
result.lineHeight = lineHeight;
|
|
121
|
+
if (letterSpacing)
|
|
122
|
+
result.letterSpacing = letterSpacing;
|
|
123
|
+
if (textAlign)
|
|
124
|
+
result.textAlign = textAlign;
|
|
125
|
+
if (textTransform)
|
|
126
|
+
result.textTransform = textTransform;
|
|
127
|
+
if (textDecoration)
|
|
128
|
+
result.textDecoration = textDecoration;
|
|
129
|
+
if (color)
|
|
130
|
+
result.color = color;
|
|
131
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
132
|
+
}
|
|
133
|
+
function normalizeTextAlign(raw) {
|
|
134
|
+
const valid = ['left', 'center', 'right', 'justify'];
|
|
135
|
+
if (typeof raw === 'string' && valid.includes(raw)) {
|
|
136
|
+
return raw;
|
|
137
|
+
}
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
function normalizeTextTransform(raw) {
|
|
141
|
+
const valid = ['none', 'uppercase', 'lowercase', 'capitalize'];
|
|
142
|
+
if (typeof raw === 'string' && valid.includes(raw)) {
|
|
143
|
+
return raw;
|
|
144
|
+
}
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
function normalizeTextDecoration(raw) {
|
|
148
|
+
const valid = ['none', 'underline', 'line-through'];
|
|
149
|
+
if (typeof raw === 'string' && valid.includes(raw)) {
|
|
150
|
+
return raw;
|
|
151
|
+
}
|
|
152
|
+
return undefined;
|
|
153
|
+
}
|
|
154
|
+
// ─── Background ───────────────────────────────────────────────────────────────
|
|
155
|
+
/**
|
|
156
|
+
* Extrae y normaliza el background de los settings de Elementor.
|
|
157
|
+
*/
|
|
158
|
+
export function normalizeBackgroundFromElementor(settings) {
|
|
159
|
+
const color = normalizeColor(settings['background_color']);
|
|
160
|
+
const image = typeof settings['background_image'] === 'object' &&
|
|
161
|
+
settings['background_image'] !== null
|
|
162
|
+
? settings['background_image']['url']
|
|
163
|
+
: undefined;
|
|
164
|
+
const result = {};
|
|
165
|
+
if (color)
|
|
166
|
+
result.color = color;
|
|
167
|
+
if (typeof image === 'string' && image)
|
|
168
|
+
result.image = image;
|
|
169
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
170
|
+
}
|
|
171
|
+
// ─── Padding / Margin ─────────────────────────────────────────────────────────
|
|
172
|
+
/**
|
|
173
|
+
* Extrae padding de los settings de Elementor.
|
|
174
|
+
* Soporta `padding` (objeto) y `_padding` (nombre alternativo).
|
|
175
|
+
*/
|
|
176
|
+
export function normalizePaddingFromElementor(settings) {
|
|
177
|
+
return normalizeBoxModel(settings['padding'] ?? settings['_padding']);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Extrae margin de los settings de Elementor.
|
|
181
|
+
*/
|
|
182
|
+
export function normalizeMarginFromElementor(settings) {
|
|
183
|
+
return normalizeBoxModel(settings['margin'] ?? settings['_margin']);
|
|
184
|
+
}
|
|
185
|
+
// ─── StyleConfig builder ──────────────────────────────────────────────────────
|
|
186
|
+
/**
|
|
187
|
+
* Construye un StyleConfig desde los settings de Elementor.
|
|
188
|
+
* Solo incluye propiedades que tienen valor definido.
|
|
189
|
+
*/
|
|
190
|
+
export function buildStyleFromElementor(settings) {
|
|
191
|
+
const background = normalizeBackgroundFromElementor(settings);
|
|
192
|
+
const padding = normalizePaddingFromElementor(settings);
|
|
193
|
+
const margin = normalizeMarginFromElementor(settings);
|
|
194
|
+
const typography = normalizeTypographyFromElementor(settings);
|
|
195
|
+
const width = normalizeSizeValue(settings['width'] ?? settings['custom_width']);
|
|
196
|
+
const minHeight = normalizeSizeValue(settings['min_height']);
|
|
197
|
+
const result = {};
|
|
198
|
+
if (background)
|
|
199
|
+
result.background = background;
|
|
200
|
+
if (padding)
|
|
201
|
+
result.padding = padding;
|
|
202
|
+
if (margin)
|
|
203
|
+
result.margin = margin;
|
|
204
|
+
if (typography)
|
|
205
|
+
result.typography = typography;
|
|
206
|
+
if (width)
|
|
207
|
+
result.width = width;
|
|
208
|
+
if (minHeight)
|
|
209
|
+
result.minHeight = minHeight;
|
|
210
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Construye un StyleConfig desde atributos de un elemento HTML.
|
|
214
|
+
* Parsea el atributo `style` inline y clases para detectar layout.
|
|
215
|
+
*/
|
|
216
|
+
export function buildStyleFromHtml(inlineStyle, _classNames) {
|
|
217
|
+
if (!inlineStyle)
|
|
218
|
+
return undefined;
|
|
219
|
+
const result = {};
|
|
220
|
+
const declarations = inlineStyle.split(';').map((d) => d.trim()).filter(Boolean);
|
|
221
|
+
for (const decl of declarations) {
|
|
222
|
+
const colonIdx = decl.indexOf(':');
|
|
223
|
+
if (colonIdx === -1)
|
|
224
|
+
continue;
|
|
225
|
+
const prop = decl.slice(0, colonIdx).trim().toLowerCase();
|
|
226
|
+
const val = decl.slice(colonIdx + 1).trim();
|
|
227
|
+
if (!val)
|
|
228
|
+
continue;
|
|
229
|
+
switch (prop) {
|
|
230
|
+
case 'width':
|
|
231
|
+
result.width = val;
|
|
232
|
+
break;
|
|
233
|
+
case 'height':
|
|
234
|
+
result.height = val;
|
|
235
|
+
break;
|
|
236
|
+
case 'min-width':
|
|
237
|
+
result.minWidth = val;
|
|
238
|
+
break;
|
|
239
|
+
case 'max-width':
|
|
240
|
+
result.maxWidth = val;
|
|
241
|
+
break;
|
|
242
|
+
case 'min-height':
|
|
243
|
+
result.minHeight = val;
|
|
244
|
+
break;
|
|
245
|
+
case 'max-height':
|
|
246
|
+
result.maxHeight = val;
|
|
247
|
+
break;
|
|
248
|
+
case 'opacity':
|
|
249
|
+
result.opacity = parseFloat(val);
|
|
250
|
+
break;
|
|
251
|
+
case 'background-color':
|
|
252
|
+
result.background = { ...result.background, color: normalizeColor(val) ?? val };
|
|
253
|
+
break;
|
|
254
|
+
case 'color':
|
|
255
|
+
result.typography = { ...result.typography, color: normalizeColor(val) ?? val };
|
|
256
|
+
break;
|
|
257
|
+
case 'font-size':
|
|
258
|
+
result.typography = { ...result.typography, fontSize: val };
|
|
259
|
+
break;
|
|
260
|
+
case 'font-family':
|
|
261
|
+
result.typography = { ...result.typography, fontFamily: val };
|
|
262
|
+
break;
|
|
263
|
+
case 'text-align':
|
|
264
|
+
result.typography = {
|
|
265
|
+
...result.typography,
|
|
266
|
+
textAlign: normalizeTextAlign(val),
|
|
267
|
+
};
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return Object.keys(result).length > 0 ? result : undefined;
|
|
272
|
+
}
|
|
273
|
+
// ─── Sanitización básica de texto ─────────────────────────────────────────────
|
|
274
|
+
/** Elimina etiquetas HTML de un string de texto. */
|
|
275
|
+
export function stripHtmlTags(raw) {
|
|
276
|
+
return raw.replace(/<[^>]*>/g, '').trim();
|
|
277
|
+
}
|
|
278
|
+
/** Limpia y normaliza un string de texto plano. */
|
|
279
|
+
export function normalizeText(raw) {
|
|
280
|
+
if (typeof raw !== 'string')
|
|
281
|
+
return undefined;
|
|
282
|
+
const cleaned = raw.trim();
|
|
283
|
+
return cleaned !== '' ? cleaned : undefined;
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizer.js","sourceRoot":"","sources":["../../src/core/normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MUCV — VIR Optimizer
|
|
3
|
+
* Aplica transformaciones opcionales al árbol VIR antes de generar output.
|
|
4
|
+
* Es no-destructivo: nunca elimina información visible al usuario final.
|
|
5
|
+
*
|
|
6
|
+
* @see docs/VIR-SPEC.md §5
|
|
7
|
+
*/
|
|
8
|
+
import type { VisualIR } from './vir.js';
|
|
9
|
+
export interface OptimizerOptions {
|
|
10
|
+
/** Elimina nodos contenedor vacíos (sin hijos, sin contenido, sin estilos). Default: true */
|
|
11
|
+
removeEmptyContainers?: boolean;
|
|
12
|
+
/** Añade display:flex/grid a nodos flex/grid que no lo tienen en styles. Default: true */
|
|
13
|
+
inferLayoutDisplay?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const optimizer: {
|
|
16
|
+
/**
|
|
17
|
+
* Optimiza un VisualIR. Retorna un nuevo VisualIR sin mutar el original.
|
|
18
|
+
*/
|
|
19
|
+
optimize(vir: VisualIR, options?: OptimizerOptions): VisualIR;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=optimizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer.d.ts","sourceRoot":"","sources":["../../src/core/optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,UAAU,CAAA;AAKpD,MAAM,WAAW,gBAAgB;IAC/B,6FAA6F;IAC7F,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,0FAA0F;IAC1F,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AASD,eAAO,MAAM,SAAS;IACpB;;OAEG;kBACW,QAAQ,YAAW,gBAAgB,GAAQ,QAAQ;CAclE,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MUCV — VIR Optimizer
|
|
3
|
+
* Aplica transformaciones opcionales al árbol VIR antes de generar output.
|
|
4
|
+
* Es no-destructivo: nunca elimina información visible al usuario final.
|
|
5
|
+
*
|
|
6
|
+
* @see docs/VIR-SPEC.md §5
|
|
7
|
+
*/
|
|
8
|
+
import { logger } from '../utils/logger.js';
|
|
9
|
+
const DEFAULTS = {
|
|
10
|
+
removeEmptyContainers: true,
|
|
11
|
+
inferLayoutDisplay: true,
|
|
12
|
+
};
|
|
13
|
+
// ─── Optimizer principal ──────────────────────────────────────────────────────
|
|
14
|
+
export const optimizer = {
|
|
15
|
+
/**
|
|
16
|
+
* Optimiza un VisualIR. Retorna un nuevo VisualIR sin mutar el original.
|
|
17
|
+
*/
|
|
18
|
+
optimize(vir, options = {}) {
|
|
19
|
+
const opts = { ...DEFAULTS, ...options };
|
|
20
|
+
const root = vir.root
|
|
21
|
+
.map((node) => optimizeNode(node, opts))
|
|
22
|
+
.filter((n) => n !== null);
|
|
23
|
+
logger.debug({ before: vir.root.length, after: root.length }, 'VIR optimized');
|
|
24
|
+
return { ...vir, root };
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
// ─── Optimización recursiva ───────────────────────────────────────────────────
|
|
28
|
+
function optimizeNode(node, opts) {
|
|
29
|
+
// Procesar hijos recursivamente primero
|
|
30
|
+
const children = node.children
|
|
31
|
+
?.map((child) => optimizeNode(child, opts))
|
|
32
|
+
.filter((n) => n !== null);
|
|
33
|
+
let optimized = {
|
|
34
|
+
...node,
|
|
35
|
+
...(children !== undefined && { children }),
|
|
36
|
+
};
|
|
37
|
+
// Inferir display layout en styles
|
|
38
|
+
if (opts.inferLayoutDisplay) {
|
|
39
|
+
optimized = inferDisplay(optimized);
|
|
40
|
+
}
|
|
41
|
+
// Eliminar contenedores vacíos
|
|
42
|
+
if (opts.removeEmptyContainers && isEmptyContainer(optimized)) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return optimized;
|
|
46
|
+
}
|
|
47
|
+
// ─── Transformaciones individuales ────────────────────────────────────────────
|
|
48
|
+
function inferDisplay(node) {
|
|
49
|
+
if (node.type !== 'flex' && node.type !== 'grid')
|
|
50
|
+
return node;
|
|
51
|
+
const display = node.type === 'flex' ? 'flex' : 'grid';
|
|
52
|
+
const alreadyHas = node.layout?.display === display;
|
|
53
|
+
if (alreadyHas)
|
|
54
|
+
return node;
|
|
55
|
+
return {
|
|
56
|
+
...node,
|
|
57
|
+
layout: {
|
|
58
|
+
...node.layout,
|
|
59
|
+
display,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function isEmptyContainer(node) {
|
|
64
|
+
const containerTypes = new Set(['section', 'container', 'flex', 'grid']);
|
|
65
|
+
if (!containerTypes.has(node.type))
|
|
66
|
+
return false;
|
|
67
|
+
const hasChildren = (node.children?.length ?? 0) > 0;
|
|
68
|
+
const hasContent = node.content !== undefined &&
|
|
69
|
+
Object.keys(node.content).length > 0;
|
|
70
|
+
const hasStyles = node.styles !== undefined &&
|
|
71
|
+
Object.keys(node.styles).length > 0;
|
|
72
|
+
const hasOriginalId = node.meta?.originalId !== undefined;
|
|
73
|
+
return !hasChildren && !hasContent && !hasStyles && !hasOriginalId;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../src/core/optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MUCV — Resultado de parsing con warnings
|
|
3
|
+
* Los parsers retornan este tipo para propagar advertencias de sanitización.
|
|
4
|
+
*/
|
|
5
|
+
import type { VisualIR } from './vir.js';
|
|
6
|
+
export interface ParseResult {
|
|
7
|
+
vir: VisualIR;
|
|
8
|
+
warnings: string[];
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=parse-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-result.d.ts","sourceRoot":"","sources":["../../src/core/parse-result.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,QAAQ,CAAA;IACb,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-result.js","sourceRoot":"","sources":["../../src/core/parse-result.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MUCV — Tipos TypeScript del VIR (Visual Intermediate Representation)
|
|
3
|
+
* Fuente de verdad de tipos en compilación.
|
|
4
|
+
* La validación en runtime se hace via src/schemas/vir.schema.ts (Zod).
|
|
5
|
+
*
|
|
6
|
+
* @see docs/VIR-SPEC.md
|
|
7
|
+
*/
|
|
8
|
+
export type SpacingValue = string;
|
|
9
|
+
export type SizeValue = string | 'auto' | 'full';
|
|
10
|
+
export type AlignValue = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
|
|
11
|
+
export type JustifyValue = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';
|
|
12
|
+
export type VisualNodeType = 'section' | 'container' | 'heading' | 'text' | 'image' | 'button' | 'list' | 'grid' | 'flex' | 'custom';
|
|
13
|
+
export type SourceType = 'elementor' | 'html' | 'react' | 'vue' | 'svelte' | 'unknown';
|
|
14
|
+
export interface SourceMeta {
|
|
15
|
+
type: SourceType;
|
|
16
|
+
version?: string;
|
|
17
|
+
sourceId?: string;
|
|
18
|
+
url?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface LayoutConfig {
|
|
21
|
+
display?: 'block' | 'flex' | 'grid' | 'inline' | 'none';
|
|
22
|
+
direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse';
|
|
23
|
+
wrap?: boolean;
|
|
24
|
+
gap?: SpacingValue;
|
|
25
|
+
align?: AlignValue;
|
|
26
|
+
justify?: JustifyValue;
|
|
27
|
+
columns?: number;
|
|
28
|
+
rows?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface BoxModel {
|
|
31
|
+
top?: string;
|
|
32
|
+
right?: string;
|
|
33
|
+
bottom?: string;
|
|
34
|
+
left?: string;
|
|
35
|
+
all?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface GradientStop {
|
|
38
|
+
color: string;
|
|
39
|
+
position: string;
|
|
40
|
+
}
|
|
41
|
+
export interface GradientConfig {
|
|
42
|
+
type: 'linear' | 'radial';
|
|
43
|
+
angle?: number;
|
|
44
|
+
stops: GradientStop[];
|
|
45
|
+
}
|
|
46
|
+
export interface BackgroundConfig {
|
|
47
|
+
color?: string;
|
|
48
|
+
image?: string;
|
|
49
|
+
gradient?: GradientConfig;
|
|
50
|
+
size?: 'cover' | 'contain' | 'auto' | string;
|
|
51
|
+
position?: string;
|
|
52
|
+
repeat?: 'repeat' | 'no-repeat' | 'repeat-x' | 'repeat-y';
|
|
53
|
+
}
|
|
54
|
+
export interface BorderConfig {
|
|
55
|
+
width?: BoxModel;
|
|
56
|
+
style?: 'solid' | 'dashed' | 'dotted' | 'none';
|
|
57
|
+
color?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface TypographyConfig {
|
|
60
|
+
fontSize?: string;
|
|
61
|
+
fontFamily?: string;
|
|
62
|
+
fontWeight?: string | number;
|
|
63
|
+
lineHeight?: string;
|
|
64
|
+
letterSpacing?: string;
|
|
65
|
+
textAlign?: 'left' | 'center' | 'right' | 'justify';
|
|
66
|
+
textDecoration?: 'none' | 'underline' | 'line-through';
|
|
67
|
+
textTransform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';
|
|
68
|
+
color?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface StyleConfig {
|
|
71
|
+
width?: SizeValue;
|
|
72
|
+
height?: SizeValue;
|
|
73
|
+
minWidth?: SizeValue;
|
|
74
|
+
maxWidth?: SizeValue;
|
|
75
|
+
minHeight?: SizeValue;
|
|
76
|
+
maxHeight?: SizeValue;
|
|
77
|
+
padding?: BoxModel;
|
|
78
|
+
margin?: BoxModel;
|
|
79
|
+
background?: BackgroundConfig;
|
|
80
|
+
border?: BorderConfig;
|
|
81
|
+
borderRadius?: BoxModel;
|
|
82
|
+
typography?: TypographyConfig;
|
|
83
|
+
opacity?: number;
|
|
84
|
+
visibility?: 'visible' | 'hidden';
|
|
85
|
+
overflow?: 'visible' | 'hidden' | 'auto' | 'scroll';
|
|
86
|
+
responsive?: {
|
|
87
|
+
tablet?: Partial<StyleConfig>;
|
|
88
|
+
mobile?: Partial<StyleConfig>;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export interface ListItem {
|
|
92
|
+
id: string;
|
|
93
|
+
text?: string;
|
|
94
|
+
icon?: string;
|
|
95
|
+
href?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface ContentConfig {
|
|
98
|
+
text?: string;
|
|
99
|
+
richText?: string;
|
|
100
|
+
level?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
101
|
+
src?: string;
|
|
102
|
+
alt?: string;
|
|
103
|
+
caption?: string;
|
|
104
|
+
width?: number;
|
|
105
|
+
height?: number;
|
|
106
|
+
label?: string;
|
|
107
|
+
href?: string;
|
|
108
|
+
target?: '_self' | '_blank' | 'none';
|
|
109
|
+
rel?: string;
|
|
110
|
+
items?: ListItem[];
|
|
111
|
+
rawData?: unknown;
|
|
112
|
+
}
|
|
113
|
+
export interface NodeMeta {
|
|
114
|
+
originalId?: string;
|
|
115
|
+
originalType?: string;
|
|
116
|
+
cssClasses?: string[];
|
|
117
|
+
attributes?: Record<string, string>;
|
|
118
|
+
elementorSettings?: unknown;
|
|
119
|
+
}
|
|
120
|
+
export interface VisualNode {
|
|
121
|
+
id: string;
|
|
122
|
+
type: VisualNodeType;
|
|
123
|
+
layout?: LayoutConfig;
|
|
124
|
+
styles?: StyleConfig;
|
|
125
|
+
content?: ContentConfig;
|
|
126
|
+
children?: VisualNode[];
|
|
127
|
+
meta?: NodeMeta;
|
|
128
|
+
}
|
|
129
|
+
export interface VisualIR {
|
|
130
|
+
virVersion: string;
|
|
131
|
+
id: string;
|
|
132
|
+
source: SourceMeta;
|
|
133
|
+
root: VisualNode[];
|
|
134
|
+
createdAt: string;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=vir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vir.d.ts","sourceRoot":"","sources":["../../src/core/vir.ts"],"names":[],"mappings":"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"}
|
package/dist/core/vir.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MUCV — Tipos TypeScript del VIR (Visual Intermediate Representation)
|
|
3
|
+
* Fuente de verdad de tipos en compilación.
|
|
4
|
+
* La validación en runtime se hace via src/schemas/vir.schema.ts (Zod).
|
|
5
|
+
*
|
|
6
|
+
* @see docs/VIR-SPEC.md
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=vir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vir.js","sourceRoot":"","sources":["../../src/core/vir.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MUCV — Style Serializer
|
|
3
|
+
* Convierte StyleConfig → declaraciones CSS.
|
|
4
|
+
* Módulo compartido por todos los generadores de output.
|
|
5
|
+
*
|
|
6
|
+
* @see docs/VIR-SPEC.md §3
|
|
7
|
+
*/
|
|
8
|
+
import type { StyleConfig, BoxModel } from '../core/vir.js';
|
|
9
|
+
/**
|
|
10
|
+
* Convierte un StyleConfig en un array de declaraciones CSS (sin selector).
|
|
11
|
+
* @example styleToDeclarations({ width: '100%' }) → ['width: 100%']
|
|
12
|
+
*/
|
|
13
|
+
export declare function styleToDeclarations(styles: StyleConfig): string[];
|
|
14
|
+
/**
|
|
15
|
+
* Convierte un BoxModel al shorthand CSS más compacto.
|
|
16
|
+
* @example { all: '16px' } → '16px'
|
|
17
|
+
* @example { top: '10px', right: '20px' } → '10px 20px 0 0'
|
|
18
|
+
*/
|
|
19
|
+
export declare function boxModelToShorthand(bm: BoxModel): string;
|
|
20
|
+
/**
|
|
21
|
+
* Construye un bloque CSS completo: selector { declarations }.
|
|
22
|
+
* Retorna string vacío si no hay declaraciones.
|
|
23
|
+
*/
|
|
24
|
+
export declare function declsToBlock(selector: string, decls: string[]): string;
|
|
25
|
+
//# sourceMappingURL=style-serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-serializer.d.ts","sourceRoot":"","sources":["../../src/generators/style-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EAIT,MAAM,gBAAgB,CAAA;AAIvB;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAoBjE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,CAQxD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAItE"}
|