@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.
Files changed (110) hide show
  1. package/README.md +126 -0
  2. package/dist/core/elementor-parser.d.ts +22 -0
  3. package/dist/core/elementor-parser.d.ts.map +1 -0
  4. package/dist/core/elementor-parser.js +186 -0
  5. package/dist/core/elementor-parser.js.map +1 -0
  6. package/dist/core/html-parser.d.ts +27 -0
  7. package/dist/core/html-parser.d.ts.map +1 -0
  8. package/dist/core/html-parser.js +247 -0
  9. package/dist/core/html-parser.js.map +1 -0
  10. package/dist/core/jsx-parser.d.ts +22 -0
  11. package/dist/core/jsx-parser.d.ts.map +1 -0
  12. package/dist/core/jsx-parser.js +261 -0
  13. package/dist/core/jsx-parser.js.map +1 -0
  14. package/dist/core/mapper.d.ts +52 -0
  15. package/dist/core/mapper.d.ts.map +1 -0
  16. package/dist/core/mapper.js +141 -0
  17. package/dist/core/mapper.js.map +1 -0
  18. package/dist/core/normalizer.d.ts +57 -0
  19. package/dist/core/normalizer.d.ts.map +1 -0
  20. package/dist/core/normalizer.js +285 -0
  21. package/dist/core/normalizer.js.map +1 -0
  22. package/dist/core/optimizer.d.ts +21 -0
  23. package/dist/core/optimizer.d.ts.map +1 -0
  24. package/dist/core/optimizer.js +75 -0
  25. package/dist/core/optimizer.js.map +1 -0
  26. package/dist/core/parse-result.d.ts +10 -0
  27. package/dist/core/parse-result.d.ts.map +1 -0
  28. package/dist/core/parse-result.js +6 -0
  29. package/dist/core/parse-result.js.map +1 -0
  30. package/dist/core/vir.d.ts +136 -0
  31. package/dist/core/vir.d.ts.map +1 -0
  32. package/dist/core/vir.js +9 -0
  33. package/dist/core/vir.js.map +1 -0
  34. package/dist/generators/style-serializer.d.ts +25 -0
  35. package/dist/generators/style-serializer.d.ts.map +1 -0
  36. package/dist/generators/style-serializer.js +129 -0
  37. package/dist/generators/style-serializer.js.map +1 -0
  38. package/dist/generators/to-elementor.d.ts +13 -0
  39. package/dist/generators/to-elementor.d.ts.map +1 -0
  40. package/dist/generators/to-elementor.js +150 -0
  41. package/dist/generators/to-elementor.js.map +1 -0
  42. package/dist/generators/to-html-css.d.ts +22 -0
  43. package/dist/generators/to-html-css.d.ts.map +1 -0
  44. package/dist/generators/to-html-css.js +127 -0
  45. package/dist/generators/to-html-css.js.map +1 -0
  46. package/dist/generators/to-react.d.ts +22 -0
  47. package/dist/generators/to-react.d.ts.map +1 -0
  48. package/dist/generators/to-react.js +123 -0
  49. package/dist/generators/to-react.js.map +1 -0
  50. package/dist/generators/to-svelte.d.ts +15 -0
  51. package/dist/generators/to-svelte.d.ts.map +1 -0
  52. package/dist/generators/to-svelte.js +105 -0
  53. package/dist/generators/to-svelte.js.map +1 -0
  54. package/dist/generators/to-vue.d.ts +17 -0
  55. package/dist/generators/to-vue.d.ts.map +1 -0
  56. package/dist/generators/to-vue.js +108 -0
  57. package/dist/generators/to-vue.js.map +1 -0
  58. package/dist/index.d.ts +8 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +228 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/schemas/input.schema.d.ts +245 -0
  63. package/dist/schemas/input.schema.d.ts.map +1 -0
  64. package/dist/schemas/input.schema.js +66 -0
  65. package/dist/schemas/input.schema.js.map +1 -0
  66. package/dist/schemas/vir.schema.d.ts +1786 -0
  67. package/dist/schemas/vir.schema.d.ts.map +1 -0
  68. package/dist/schemas/vir.schema.js +201 -0
  69. package/dist/schemas/vir.schema.js.map +1 -0
  70. package/dist/tools/convert-design.d.ts +40 -0
  71. package/dist/tools/convert-design.d.ts.map +1 -0
  72. package/dist/tools/convert-design.js +106 -0
  73. package/dist/tools/convert-design.js.map +1 -0
  74. package/dist/tools/validate-vir.d.ts +18 -0
  75. package/dist/tools/validate-vir.d.ts.map +1 -0
  76. package/dist/tools/validate-vir.js +32 -0
  77. package/dist/tools/validate-vir.js.map +1 -0
  78. package/dist/tools/wp-connector.d.ts +55 -0
  79. package/dist/tools/wp-connector.d.ts.map +1 -0
  80. package/dist/tools/wp-connector.js +146 -0
  81. package/dist/tools/wp-connector.js.map +1 -0
  82. package/dist/tools/wp-tools.d.ts +51 -0
  83. package/dist/tools/wp-tools.d.ts.map +1 -0
  84. package/dist/tools/wp-tools.js +126 -0
  85. package/dist/tools/wp-tools.js.map +1 -0
  86. package/dist/utils/errors.d.ts +35 -0
  87. package/dist/utils/errors.d.ts.map +1 -0
  88. package/dist/utils/errors.js +67 -0
  89. package/dist/utils/errors.js.map +1 -0
  90. package/dist/utils/id-generator.d.ts +27 -0
  91. package/dist/utils/id-generator.d.ts.map +1 -0
  92. package/dist/utils/id-generator.js +43 -0
  93. package/dist/utils/id-generator.js.map +1 -0
  94. package/dist/utils/logger.d.ts +8 -0
  95. package/dist/utils/logger.d.ts.map +1 -0
  96. package/dist/utils/logger.js +19 -0
  97. package/dist/utils/logger.js.map +1 -0
  98. package/dist/utils/metrics.d.ts +30 -0
  99. package/dist/utils/metrics.d.ts.map +1 -0
  100. package/dist/utils/metrics.js +50 -0
  101. package/dist/utils/metrics.js.map +1 -0
  102. package/dist/utils/rate-limiter.d.ts +25 -0
  103. package/dist/utils/rate-limiter.d.ts.map +1 -0
  104. package/dist/utils/rate-limiter.js +41 -0
  105. package/dist/utils/rate-limiter.js.map +1 -0
  106. package/dist/utils/url-validator.d.ts +14 -0
  107. package/dist/utils/url-validator.d.ts.map +1 -0
  108. package/dist/utils/url-validator.js +37 -0
  109. package/dist/utils/url-validator.js.map +1 -0
  110. package/package.json +73 -0
@@ -0,0 +1,37 @@
1
+ /**
2
+ * MUCV — Validación de URLs seguras
3
+ * Bloquea protocolos peligrosos: javascript:, data:, vbscript:
4
+ */
5
+ const DANGEROUS_PROTOCOLS = new Set(['javascript:', 'data:', 'vbscript:']);
6
+ const MAX_URL_LENGTH = 2048;
7
+ /**
8
+ * Verifica si una URL es segura (no usa protocolos peligrosos).
9
+ * Acepta URLs absolutas (https://, http://) y relativas (/page, #anchor, ./file).
10
+ */
11
+ export function isUrlSafe(url) {
12
+ if (url.length > MAX_URL_LENGTH)
13
+ return false;
14
+ // Normalizar: eliminar espacios y saltos de línea que podrían ocultar protocolo
15
+ const normalized = url.replace(/[\s\n\r\t]/g, '').toLowerCase();
16
+ // Verificar protocolos peligrosos directamente
17
+ for (const protocol of DANGEROUS_PROTOCOLS) {
18
+ if (normalized.startsWith(protocol))
19
+ return false;
20
+ }
21
+ // Intentar parsear como URL absoluta
22
+ try {
23
+ const parsed = new URL(url);
24
+ return !DANGEROUS_PROTOCOLS.has(parsed.protocol);
25
+ }
26
+ catch {
27
+ // URL relativa (/page, #anchor, ./file) — aceptar si pasó los checks anteriores
28
+ return true;
29
+ }
30
+ }
31
+ /**
32
+ * Sanitiza una URL: retorna '#' si es insegura, la URL original si es segura.
33
+ */
34
+ export function sanitizeUrl(url) {
35
+ return isUrlSafe(url) ? url : '#';
36
+ }
37
+ //# sourceMappingURL=url-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-validator.js","sourceRoot":"","sources":["../../src/utils/url-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;AAC1E,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,GAAG,CAAC,MAAM,GAAG,cAAc;QAAE,OAAO,KAAK,CAAA;IAE7C,gFAAgF;IAChF,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAE/D,+CAA+C;IAC/C,KAAK,MAAM,QAAQ,IAAI,mBAAmB,EAAE,CAAC;QAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,KAAK,CAAA;IACnD,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,gFAAgF;QAChF,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;AACnC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@sn4p.dev/mucv",
3
+ "version": "0.5.0",
4
+ "description": "Motor Universal de Conversión Visual — MCP server para conversión entre Elementor, React, HTML, Vue y Svelte via VIR",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "mucv": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "keywords": [
15
+ "mcp",
16
+ "elementor",
17
+ "react",
18
+ "vue",
19
+ "svelte",
20
+ "html",
21
+ "css",
22
+ "converter",
23
+ "visual",
24
+ "wordpress",
25
+ "design"
26
+ ],
27
+ "author": "yosnap",
28
+ "license": "ISC",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/yosnap/mucv.git"
32
+ },
33
+ "homepage": "https://github.com/yosnap/mucv#readme",
34
+ "bugs": {
35
+ "url": "https://github.com/yosnap/mucv/issues"
36
+ },
37
+ "scripts": {
38
+ "build": "tsc --project tsconfig.json",
39
+ "dev": "tsx watch src/index.ts",
40
+ "type-check": "tsc --noEmit",
41
+ "test": "vitest run",
42
+ "test:watch": "vitest",
43
+ "test:coverage": "vitest run --coverage",
44
+ "test:e2e": "RUN_E2E=1 vitest run tests/e2e/",
45
+ "lint": "eslint src tests",
46
+ "lint:fix": "eslint src tests --fix"
47
+ },
48
+ "engines": {
49
+ "node": ">=20.0.0",
50
+ "npm": ">=10.0.0"
51
+ },
52
+ "dependencies": {
53
+ "@babel/parser": "^7.29.0",
54
+ "@babel/traverse": "^7.29.0",
55
+ "@babel/types": "^7.29.0",
56
+ "@modelcontextprotocol/sdk": "^1.0.0",
57
+ "node-html-parser": "^7.0.2",
58
+ "pino": "^9.6.0",
59
+ "zod": "^3.24.0"
60
+ },
61
+ "devDependencies": {
62
+ "@types/babel__core": "^7.20.5",
63
+ "@types/babel__traverse": "^7.28.0",
64
+ "@types/node": "^22.0.0",
65
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
66
+ "@typescript-eslint/parser": "^8.0.0",
67
+ "@vitest/coverage-v8": "^3.0.0",
68
+ "eslint": "^9.0.0",
69
+ "tsx": "^4.19.0",
70
+ "typescript": "^5.7.0",
71
+ "vitest": "^3.0.0"
72
+ }
73
+ }