codemeld 2.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.
Files changed (243) hide show
  1. package/README.md +514 -0
  2. package/bin/cli.js +2 -0
  3. package/dist/ai/agent.d.ts +124 -0
  4. package/dist/ai/agent.d.ts.map +1 -0
  5. package/dist/ai/agent.js +289 -0
  6. package/dist/ai/agent.js.map +1 -0
  7. package/dist/ai/index.d.ts +10 -0
  8. package/dist/ai/index.d.ts.map +1 -0
  9. package/dist/ai/index.js +10 -0
  10. package/dist/ai/index.js.map +1 -0
  11. package/dist/ai/prompts.d.ts +35 -0
  12. package/dist/ai/prompts.d.ts.map +1 -0
  13. package/dist/ai/prompts.js +166 -0
  14. package/dist/ai/prompts.js.map +1 -0
  15. package/dist/ai/refinement-loop.d.ts +29 -0
  16. package/dist/ai/refinement-loop.d.ts.map +1 -0
  17. package/dist/ai/refinement-loop.js +180 -0
  18. package/dist/ai/refinement-loop.js.map +1 -0
  19. package/dist/ai/tools.d.ts +17 -0
  20. package/dist/ai/tools.d.ts.map +1 -0
  21. package/dist/ai/tools.js +353 -0
  22. package/dist/ai/tools.js.map +1 -0
  23. package/dist/ai/visual-compare.d.ts +43 -0
  24. package/dist/ai/visual-compare.d.ts.map +1 -0
  25. package/dist/ai/visual-compare.js +176 -0
  26. package/dist/ai/visual-compare.js.map +1 -0
  27. package/dist/cli.d.ts +3 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +179 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/converter.d.ts +10 -0
  32. package/dist/converter.d.ts.map +1 -0
  33. package/dist/converter.js +836 -0
  34. package/dist/converter.js.map +1 -0
  35. package/dist/deconverter.d.ts +19 -0
  36. package/dist/deconverter.d.ts.map +1 -0
  37. package/dist/deconverter.js +188 -0
  38. package/dist/deconverter.js.map +1 -0
  39. package/dist/frameworks/angular-adapter.d.ts +27 -0
  40. package/dist/frameworks/angular-adapter.d.ts.map +1 -0
  41. package/dist/frameworks/angular-adapter.js +617 -0
  42. package/dist/frameworks/angular-adapter.js.map +1 -0
  43. package/dist/frameworks/index.d.ts +10 -0
  44. package/dist/frameworks/index.d.ts.map +1 -0
  45. package/dist/frameworks/index.js +21 -0
  46. package/dist/frameworks/index.js.map +1 -0
  47. package/dist/frameworks/nextjs-adapter.d.ts +22 -0
  48. package/dist/frameworks/nextjs-adapter.d.ts.map +1 -0
  49. package/dist/frameworks/nextjs-adapter.js +392 -0
  50. package/dist/frameworks/nextjs-adapter.js.map +1 -0
  51. package/dist/frameworks/react-adapter.d.ts +21 -0
  52. package/dist/frameworks/react-adapter.d.ts.map +1 -0
  53. package/dist/frameworks/react-adapter.js +71 -0
  54. package/dist/frameworks/react-adapter.js.map +1 -0
  55. package/dist/frameworks/svelte-adapter.d.ts +27 -0
  56. package/dist/frameworks/svelte-adapter.d.ts.map +1 -0
  57. package/dist/frameworks/svelte-adapter.js +519 -0
  58. package/dist/frameworks/svelte-adapter.js.map +1 -0
  59. package/dist/frameworks/types.d.ts +78 -0
  60. package/dist/frameworks/types.d.ts.map +1 -0
  61. package/dist/frameworks/types.js +2 -0
  62. package/dist/frameworks/types.js.map +1 -0
  63. package/dist/frameworks/vue-adapter.d.ts +34 -0
  64. package/dist/frameworks/vue-adapter.d.ts.map +1 -0
  65. package/dist/frameworks/vue-adapter.js +632 -0
  66. package/dist/frameworks/vue-adapter.js.map +1 -0
  67. package/dist/generators/accessibility-generator.d.ts +43 -0
  68. package/dist/generators/accessibility-generator.d.ts.map +1 -0
  69. package/dist/generators/accessibility-generator.js +507 -0
  70. package/dist/generators/accessibility-generator.js.map +1 -0
  71. package/dist/generators/asset-handler.d.ts +14 -0
  72. package/dist/generators/asset-handler.d.ts.map +1 -0
  73. package/dist/generators/asset-handler.js +79 -0
  74. package/dist/generators/asset-handler.js.map +1 -0
  75. package/dist/generators/build-verifier.d.ts +8 -0
  76. package/dist/generators/build-verifier.d.ts.map +1 -0
  77. package/dist/generators/build-verifier.js +64 -0
  78. package/dist/generators/build-verifier.js.map +1 -0
  79. package/dist/generators/component-extractor.d.ts +25 -0
  80. package/dist/generators/component-extractor.d.ts.map +1 -0
  81. package/dist/generators/component-extractor.js +146 -0
  82. package/dist/generators/component-extractor.js.map +1 -0
  83. package/dist/generators/component-generator.d.ts +12 -0
  84. package/dist/generators/component-generator.d.ts.map +1 -0
  85. package/dist/generators/component-generator.js +724 -0
  86. package/dist/generators/component-generator.js.map +1 -0
  87. package/dist/generators/deploy-generator.d.ts +9 -0
  88. package/dist/generators/deploy-generator.d.ts.map +1 -0
  89. package/dist/generators/deploy-generator.js +409 -0
  90. package/dist/generators/deploy-generator.js.map +1 -0
  91. package/dist/generators/error-boundary.d.ts +5 -0
  92. package/dist/generators/error-boundary.d.ts.map +1 -0
  93. package/dist/generators/error-boundary.js +59 -0
  94. package/dist/generators/error-boundary.js.map +1 -0
  95. package/dist/generators/form-generator.d.ts +42 -0
  96. package/dist/generators/form-generator.d.ts.map +1 -0
  97. package/dist/generators/form-generator.js +662 -0
  98. package/dist/generators/form-generator.js.map +1 -0
  99. package/dist/generators/hooks-generator.d.ts +40 -0
  100. package/dist/generators/hooks-generator.d.ts.map +1 -0
  101. package/dist/generators/hooks-generator.js +297 -0
  102. package/dist/generators/hooks-generator.js.map +1 -0
  103. package/dist/generators/html-generator.d.ts +27 -0
  104. package/dist/generators/html-generator.d.ts.map +1 -0
  105. package/dist/generators/html-generator.js +772 -0
  106. package/dist/generators/html-generator.js.map +1 -0
  107. package/dist/generators/jquery-converter.d.ts +41 -0
  108. package/dist/generators/jquery-converter.d.ts.map +1 -0
  109. package/dist/generators/jquery-converter.js +594 -0
  110. package/dist/generators/jquery-converter.js.map +1 -0
  111. package/dist/generators/pattern-implementer.d.ts +26 -0
  112. package/dist/generators/pattern-implementer.d.ts.map +1 -0
  113. package/dist/generators/pattern-implementer.js +336 -0
  114. package/dist/generators/pattern-implementer.js.map +1 -0
  115. package/dist/generators/performance-generator.d.ts +51 -0
  116. package/dist/generators/performance-generator.d.ts.map +1 -0
  117. package/dist/generators/performance-generator.js +428 -0
  118. package/dist/generators/performance-generator.js.map +1 -0
  119. package/dist/generators/router-generator.d.ts +21 -0
  120. package/dist/generators/router-generator.d.ts.map +1 -0
  121. package/dist/generators/router-generator.js +178 -0
  122. package/dist/generators/router-generator.js.map +1 -0
  123. package/dist/generators/scaffolder.d.ts +28 -0
  124. package/dist/generators/scaffolder.d.ts.map +1 -0
  125. package/dist/generators/scaffolder.js +266 -0
  126. package/dist/generators/scaffolder.js.map +1 -0
  127. package/dist/generators/seo-generator.d.ts +29 -0
  128. package/dist/generators/seo-generator.d.ts.map +1 -0
  129. package/dist/generators/seo-generator.js +223 -0
  130. package/dist/generators/seo-generator.js.map +1 -0
  131. package/dist/generators/test-generator.d.ts +19 -0
  132. package/dist/generators/test-generator.d.ts.map +1 -0
  133. package/dist/generators/test-generator.js +398 -0
  134. package/dist/generators/test-generator.js.map +1 -0
  135. package/dist/generators/type-generator.d.ts +33 -0
  136. package/dist/generators/type-generator.d.ts.map +1 -0
  137. package/dist/generators/type-generator.js +663 -0
  138. package/dist/generators/type-generator.js.map +1 -0
  139. package/dist/index.d.ts +23 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +12 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/parsers/css-processor.d.ts +23 -0
  144. package/dist/parsers/css-processor.d.ts.map +1 -0
  145. package/dist/parsers/css-processor.js +129 -0
  146. package/dist/parsers/css-processor.js.map +1 -0
  147. package/dist/parsers/framework-parser.d.ts +48 -0
  148. package/dist/parsers/framework-parser.d.ts.map +1 -0
  149. package/dist/parsers/framework-parser.js +770 -0
  150. package/dist/parsers/framework-parser.js.map +1 -0
  151. package/dist/parsers/html-parser.d.ts +12 -0
  152. package/dist/parsers/html-parser.d.ts.map +1 -0
  153. package/dist/parsers/html-parser.js +444 -0
  154. package/dist/parsers/html-parser.js.map +1 -0
  155. package/dist/parsers/js-analyzer.d.ts +199 -0
  156. package/dist/parsers/js-analyzer.d.ts.map +1 -0
  157. package/dist/parsers/js-analyzer.js +680 -0
  158. package/dist/parsers/js-analyzer.js.map +1 -0
  159. package/dist/parsers/js-resolver.d.ts +8 -0
  160. package/dist/parsers/js-resolver.d.ts.map +1 -0
  161. package/dist/parsers/js-resolver.js +45 -0
  162. package/dist/parsers/js-resolver.js.map +1 -0
  163. package/dist/parsers/tailwind-detector.d.ts +23 -0
  164. package/dist/parsers/tailwind-detector.d.ts.map +1 -0
  165. package/dist/parsers/tailwind-detector.js +104 -0
  166. package/dist/parsers/tailwind-detector.js.map +1 -0
  167. package/dist/tests/advanced-features.test.d.ts +2 -0
  168. package/dist/tests/advanced-features.test.d.ts.map +1 -0
  169. package/dist/tests/advanced-features.test.js +235 -0
  170. package/dist/tests/advanced-features.test.js.map +1 -0
  171. package/dist/tests/css-modules.test.d.ts +2 -0
  172. package/dist/tests/css-modules.test.d.ts.map +1 -0
  173. package/dist/tests/css-modules.test.js +61 -0
  174. package/dist/tests/css-modules.test.js.map +1 -0
  175. package/dist/tests/css-processor.test.d.ts +2 -0
  176. package/dist/tests/css-processor.test.d.ts.map +1 -0
  177. package/dist/tests/css-processor.test.js +48 -0
  178. package/dist/tests/css-processor.test.js.map +1 -0
  179. package/dist/tests/html-parser.test.d.ts +2 -0
  180. package/dist/tests/html-parser.test.d.ts.map +1 -0
  181. package/dist/tests/html-parser.test.js +78 -0
  182. package/dist/tests/html-parser.test.js.map +1 -0
  183. package/dist/tests/integration.test.d.ts +2 -0
  184. package/dist/tests/integration.test.d.ts.map +1 -0
  185. package/dist/tests/integration.test.js +65 -0
  186. package/dist/tests/integration.test.js.map +1 -0
  187. package/dist/tests/js-analyzer.test.d.ts +2 -0
  188. package/dist/tests/js-analyzer.test.d.ts.map +1 -0
  189. package/dist/tests/js-analyzer.test.js +58 -0
  190. package/dist/tests/js-analyzer.test.js.map +1 -0
  191. package/dist/tests/naming.test.d.ts +2 -0
  192. package/dist/tests/naming.test.d.ts.map +1 -0
  193. package/dist/tests/naming.test.js +43 -0
  194. package/dist/tests/naming.test.js.map +1 -0
  195. package/dist/tests/router-generator.test.d.ts +2 -0
  196. package/dist/tests/router-generator.test.d.ts.map +1 -0
  197. package/dist/tests/router-generator.test.js +60 -0
  198. package/dist/tests/router-generator.test.js.map +1 -0
  199. package/dist/tui/chat.d.ts +13 -0
  200. package/dist/tui/chat.d.ts.map +1 -0
  201. package/dist/tui/chat.js +499 -0
  202. package/dist/tui/chat.js.map +1 -0
  203. package/dist/tui/design-guide.d.ts +41 -0
  204. package/dist/tui/design-guide.d.ts.map +1 -0
  205. package/dist/tui/design-guide.js +184 -0
  206. package/dist/tui/design-guide.js.map +1 -0
  207. package/dist/tui/input.d.ts +30 -0
  208. package/dist/tui/input.d.ts.map +1 -0
  209. package/dist/tui/input.js +239 -0
  210. package/dist/tui/input.js.map +1 -0
  211. package/dist/tui/renderer.d.ts +48 -0
  212. package/dist/tui/renderer.d.ts.map +1 -0
  213. package/dist/tui/renderer.js +212 -0
  214. package/dist/tui/renderer.js.map +1 -0
  215. package/dist/tui/tools.d.ts +14 -0
  216. package/dist/tui/tools.d.ts.map +1 -0
  217. package/dist/tui/tools.js +1370 -0
  218. package/dist/tui/tools.js.map +1 -0
  219. package/dist/types.d.ts +93 -0
  220. package/dist/types.d.ts.map +1 -0
  221. package/dist/types.js +2 -0
  222. package/dist/types.js.map +1 -0
  223. package/dist/utils/config.d.ts +20 -0
  224. package/dist/utils/config.d.ts.map +1 -0
  225. package/dist/utils/config.js +33 -0
  226. package/dist/utils/config.js.map +1 -0
  227. package/dist/utils/formatter.d.ts +5 -0
  228. package/dist/utils/formatter.d.ts.map +1 -0
  229. package/dist/utils/formatter.js +68 -0
  230. package/dist/utils/formatter.js.map +1 -0
  231. package/dist/utils/logger.d.ts +8 -0
  232. package/dist/utils/logger.d.ts.map +1 -0
  233. package/dist/utils/logger.js +19 -0
  234. package/dist/utils/logger.js.map +1 -0
  235. package/dist/utils/naming.d.ts +17 -0
  236. package/dist/utils/naming.d.ts.map +1 -0
  237. package/dist/utils/naming.js +48 -0
  238. package/dist/utils/naming.js.map +1 -0
  239. package/dist/utils/report.d.ts +56 -0
  240. package/dist/utils/report.d.ts.map +1 -0
  241. package/dist/utils/report.js +339 -0
  242. package/dist/utils/report.js.map +1 -0
  243. package/package.json +61 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Visual Comparison Module — Uses Playwright to screenshot original and
3
+ * converted sites, then provides the comparison to the AI agent.
4
+ */
5
+ import { createServer } from 'http';
6
+ import { readFileSync, existsSync } from 'fs';
7
+ import { join, extname } from 'path';
8
+ const MIME_TYPES = {
9
+ '.html': 'text/html',
10
+ '.css': 'text/css',
11
+ '.js': 'application/javascript',
12
+ '.json': 'application/json',
13
+ '.png': 'image/png',
14
+ '.jpg': 'image/jpeg',
15
+ '.jpeg': 'image/jpeg',
16
+ '.svg': 'image/svg+xml',
17
+ '.ico': 'image/x-icon',
18
+ '.woff': 'font/woff',
19
+ '.woff2': 'font/woff2',
20
+ '.ttf': 'font/ttf',
21
+ '.eot': 'application/vnd.ms-fontobject',
22
+ };
23
+ /**
24
+ * Serve a directory as a static HTTP server.
25
+ * Returns the server and the port it's listening on.
26
+ */
27
+ export function serveDirectory(dir, port = 0) {
28
+ return new Promise((resolve, reject) => {
29
+ const server = createServer((req, res) => {
30
+ const urlPath = req.url?.split('?')[0] || '/';
31
+ let filePath = join(dir, urlPath === '/' ? 'index.html' : urlPath);
32
+ if (!existsSync(filePath)) {
33
+ // SPA fallback — serve index.html for non-file routes
34
+ filePath = join(dir, 'index.html');
35
+ }
36
+ try {
37
+ const content = readFileSync(filePath);
38
+ const ext = extname(filePath);
39
+ res.writeHead(200, {
40
+ 'Content-Type': MIME_TYPES[ext] || 'application/octet-stream',
41
+ 'Access-Control-Allow-Origin': '*',
42
+ });
43
+ res.end(content);
44
+ }
45
+ catch {
46
+ res.writeHead(404);
47
+ res.end('Not found');
48
+ }
49
+ });
50
+ server.on('error', reject);
51
+ server.listen(port, () => {
52
+ const addr = server.address();
53
+ const resolvedPort = typeof addr === 'object' && addr ? addr.port : port;
54
+ resolve({
55
+ server,
56
+ port: resolvedPort,
57
+ url: `http://localhost:${resolvedPort}`,
58
+ });
59
+ });
60
+ });
61
+ }
62
+ /**
63
+ * Take a screenshot of a URL using Playwright.
64
+ */
65
+ export async function screenshotUrl(url, outputPath, options = {}) {
66
+ const { fullPage = true, width = 1440, height = 900, waitMs = 2000 } = options;
67
+ const { chromium } = await import('playwright');
68
+ const browser = await chromium.launch({ headless: true });
69
+ const context = await browser.newContext({ viewport: { width, height } });
70
+ const page = await context.newPage();
71
+ await page.goto(url, { waitUntil: 'networkidle', timeout: 15_000 }).catch(() => { });
72
+ await page.waitForTimeout(waitMs);
73
+ await page.screenshot({ path: outputPath, fullPage });
74
+ await browser.close();
75
+ }
76
+ /**
77
+ * Take screenshots of both the original and converted sites.
78
+ * Returns paths to the screenshot files.
79
+ */
80
+ export async function compareScreenshots(originalDir, convertedDistDir, outputDir = '/tmp') {
81
+ const originalPath = join(outputDir, 'screenshot-original.png');
82
+ const convertedPath = join(outputDir, 'screenshot-converted.png');
83
+ // Start both servers
84
+ const [originalServer, convertedServer] = await Promise.all([
85
+ serveDirectory(originalDir, 0),
86
+ serveDirectory(convertedDistDir, 0),
87
+ ]);
88
+ try {
89
+ // Take screenshots in parallel
90
+ await Promise.all([
91
+ screenshotUrl(originalServer.url, originalPath),
92
+ screenshotUrl(convertedServer.url, convertedPath),
93
+ ]);
94
+ }
95
+ finally {
96
+ // Clean up servers
97
+ originalServer.server.close();
98
+ convertedServer.server.close();
99
+ }
100
+ return { originalPath, convertedPath };
101
+ }
102
+ /**
103
+ * Build a textual description of the HTML structure for AI comparison.
104
+ * Since we can't send images to this API, we extract the DOM structure
105
+ * for text-based comparison.
106
+ */
107
+ export async function extractPageStructure(dir) {
108
+ const { chromium } = await import('playwright');
109
+ const server = await serveDirectory(dir, 0);
110
+ try {
111
+ const browser = await chromium.launch({ headless: true });
112
+ const context = await browser.newContext({ viewport: { width: 1440, height: 900 } });
113
+ const page = await context.newPage();
114
+ await page.goto(server.url, { waitUntil: 'networkidle', timeout: 15_000 }).catch(() => { });
115
+ await page.waitForTimeout(2000);
116
+ // Extract a structural summary of the rendered page
117
+ // The callback runs in the browser context (Playwright injects it)
118
+ const structure = await page.evaluate(`
119
+ (function() {
120
+ function summarize(el, depth) {
121
+ depth = depth || 0;
122
+ var indent = ' '.repeat(depth);
123
+ var tag = el.tagName.toLowerCase();
124
+ var id = el.id ? '#' + el.id : '';
125
+ var classes = el.className && typeof el.className === 'string'
126
+ ? '.' + el.className.split(/\\s+/).slice(0, 3).join('.')
127
+ : '';
128
+ var text = el.childNodes.length === 1 && el.childNodes[0].nodeType === 3
129
+ ? ' "' + (el.textContent || '').trim().slice(0, 50) + '"'
130
+ : '';
131
+ var childCount = el.children.length;
132
+ var line = indent + '<' + tag + id + classes + '>' + text;
133
+ if (childCount > 0 && depth < 4) {
134
+ line += '\\n';
135
+ var children = Array.from(el.children).slice(0, 20);
136
+ for (var i = 0; i < children.length; i++) {
137
+ line += summarize(children[i], depth + 1) + '\\n';
138
+ }
139
+ line += indent + '</' + tag + '>';
140
+ } else if (childCount > 0) {
141
+ line += ' (' + childCount + ' children)';
142
+ }
143
+ return line;
144
+ }
145
+ return summarize(document.body);
146
+ })()
147
+ `);
148
+ await browser.close();
149
+ return structure;
150
+ }
151
+ finally {
152
+ server.server.close();
153
+ }
154
+ }
155
+ /**
156
+ * Compare the DOM structures of original and converted sites.
157
+ * Returns a text summary suitable for sending to the AI agent.
158
+ */
159
+ export async function buildVisualComparisonContext(originalDir, convertedDistDir) {
160
+ const [originalStructure, convertedStructure] = await Promise.all([
161
+ extractPageStructure(originalDir).catch(() => '(failed to extract)'),
162
+ extractPageStructure(convertedDistDir).catch(() => '(failed to extract)'),
163
+ ]);
164
+ return `=== ORIGINAL SITE DOM STRUCTURE ===
165
+ ${originalStructure}
166
+
167
+ === CONVERTED REACT APP DOM STRUCTURE ===
168
+ ${convertedStructure}
169
+
170
+ Compare these two structures and identify:
171
+ 1. Missing sections (content present in original but absent in converted)
172
+ 2. Structural differences (layout, nesting)
173
+ 3. Missing text content
174
+ 4. Missing interactive elements (buttons, forms, links)`;
175
+ }
176
+ //# sourceMappingURL=visual-compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visual-compare.js","sourceRoot":"","sources":["../../src/ai/visual-compare.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { resolve } from 'path';
4
+ import { convert } from './converter.js';
5
+ import { renderReport } from './utils/report.js';
6
+ import { logger } from './utils/logger.js';
7
+ const program = new Command();
8
+ program
9
+ .name('codemeld')
10
+ .description('Convert between HTML/CSS/JS and modern frameworks (React, Next.js, Vue, Svelte, Angular) — both directions')
11
+ .version('2.1.0');
12
+ // ─── Convert command (default) ──────────────────────────────────────
13
+ program
14
+ .command('convert', { isDefault: true })
15
+ .description('Convert an HTML/CSS/JS site into a modern framework project (React, Next.js, Vue, Svelte, Angular)')
16
+ .argument('<input>', 'Path to the HTML/CSS/JS source directory')
17
+ .argument('<output>', 'Path for the generated Vite + React project')
18
+ .option('-n, --name <name>', 'Project/component name')
19
+ .option('-m, --css-modules', 'Use CSS modules instead of global CSS', false)
20
+ .option('-p, --preserve-structure', 'Preserve original file structure', false)
21
+ .option('--verify', 'Run build verification after conversion', false)
22
+ .option('--no-verify', 'Skip build verification')
23
+ .option('--no-extract', 'Disable smart component extraction')
24
+ .option('--no-prettier', 'Disable Prettier formatting')
25
+ .option('--tailwind <mode>', 'Tailwind CSS handling: auto, force, disable', 'auto')
26
+ .option('-f, --framework <framework>', 'Target framework: react, nextjs, vue, svelte, angular', 'react')
27
+ .option('--ai', 'Enable AI-powered refinement after conversion', false)
28
+ .option('--ai-max-steps <number>', 'Max AI agent iterations (default: 50)', '50')
29
+ .option('--ai-mode <mode>', 'AI mode: full, build-fix, enhance, visual', 'full')
30
+ .option('--ai-verbose', 'Show AI agent reasoning in real-time', false)
31
+ .option('--visual-compare', 'Take screenshots comparing original vs converted', false)
32
+ .option('--tests', 'Generate Vitest test files for components', false)
33
+ .option('--deploy', 'Generate deployment configs (Docker, CI/CD, Vercel, Netlify)', false)
34
+ .option('--seo', 'Generate SEO files (sitemap, robots.txt, manifest, meta tags)', false)
35
+ .option('--seo-url <url>', 'Base URL for SEO files', 'https://example.com')
36
+ .option('--a11y', 'Enhance accessibility (ARIA labels, semantic HTML, skip nav)', false)
37
+ .option('--perf', 'Add performance optimizations (React.memo, lazy loading, code splitting)', false)
38
+ .option('--forms', 'Generate form handling with validation', false)
39
+ .option('--types', 'Generate TypeScript type definitions', false)
40
+ .option('--all-extras', 'Enable all extras: --tests --deploy --seo --a11y --perf --forms --types', false)
41
+ .action(async (input, output, opts) => {
42
+ try {
43
+ logger.info(`Converting ${resolve(input)} -> ${resolve(output)}`);
44
+ logger.info('');
45
+ const result = await convert({
46
+ input: resolve(input),
47
+ output: resolve(output),
48
+ componentName: opts.name,
49
+ cssModules: opts.cssModules,
50
+ preserveStructure: opts.preserveStructure,
51
+ verify: opts.verify,
52
+ extractComponents: opts.extract !== false,
53
+ prettier: opts.prettier !== false,
54
+ tailwind: opts.tailwind,
55
+ framework: opts.framework,
56
+ generateTests: opts.tests || opts.allExtras,
57
+ generateDeploy: opts.deploy || opts.allExtras,
58
+ generateSeo: opts.seo || opts.allExtras,
59
+ seoBaseUrl: opts.seoUrl,
60
+ enhanceA11y: opts.a11y || opts.allExtras,
61
+ enhancePerf: opts.perf || opts.allExtras,
62
+ generateForms: opts.forms || opts.allExtras,
63
+ generateTypes: opts.types || opts.allExtras,
64
+ });
65
+ // Print the conversion report
66
+ if (result.report) {
67
+ console.log(renderReport(result.report));
68
+ }
69
+ if (result.errors.length > 0) {
70
+ logger.error('Conversion completed with errors:');
71
+ for (const err of result.errors) {
72
+ logger.error(` ${err}`);
73
+ }
74
+ }
75
+ if (result.buildSuccess) {
76
+ logger.success('Build verification passed!');
77
+ }
78
+ // AI Refinement Phase
79
+ if (opts.ai) {
80
+ console.log('');
81
+ logger.info('Starting AI-powered refinement...');
82
+ console.log('');
83
+ const { runRefinement } = await import('./ai/refinement-loop.js');
84
+ const refinementResult = await runRefinement({
85
+ inputDir: resolve(input),
86
+ outputDir: resolve(output),
87
+ maxSteps: parseInt(opts.aiMaxSteps, 10) || 50,
88
+ mode: opts.aiMode,
89
+ verbose: opts.aiVerbose,
90
+ });
91
+ console.log('');
92
+ if (refinementResult.buildPassed) {
93
+ logger.success('AI refinement complete — build passes!');
94
+ }
95
+ else {
96
+ logger.warn('AI refinement complete — some issues may need manual attention');
97
+ }
98
+ if (refinementResult.fixesApplied.length > 0) {
99
+ logger.info(`AI applied ${refinementResult.fixesApplied.length} fix(es)`);
100
+ }
101
+ }
102
+ // Visual Comparison
103
+ if (opts.visualCompare) {
104
+ console.log('');
105
+ logger.info('Taking visual comparison screenshots...');
106
+ try {
107
+ const { compareScreenshots } = await import('./ai/visual-compare.js');
108
+ const distDir = resolve(output, 'dist');
109
+ const { originalPath, convertedPath } = await compareScreenshots(resolve(input), distDir);
110
+ console.log('');
111
+ logger.success('Screenshots saved:');
112
+ logger.info(` Original: ${originalPath}`);
113
+ logger.info(` Converted: ${convertedPath}`);
114
+ }
115
+ catch (err) {
116
+ logger.warn(`Visual comparison failed: ${err instanceof Error ? err.message : String(err)}`);
117
+ }
118
+ }
119
+ console.log('');
120
+ logger.info('Next steps:');
121
+ logger.info(` cd ${output}`);
122
+ if (!opts.ai) {
123
+ logger.info(' npm install');
124
+ }
125
+ logger.info(' npm run dev');
126
+ }
127
+ catch (err) {
128
+ const message = err instanceof Error ? err.message : String(err);
129
+ logger.error(`Conversion failed: ${message}`);
130
+ process.exit(1);
131
+ }
132
+ });
133
+ // ─── Deconvert command (reverse conversion) ────────────────────────
134
+ program
135
+ .command('deconvert')
136
+ .description('Reverse-convert a React/Next.js/Vue/Svelte/Angular project back into static HTML/CSS/JS')
137
+ .argument('<input>', 'Path to the framework project directory')
138
+ .argument('<output>', 'Path for the generated HTML/CSS/JS output')
139
+ .option('-f, --framework <framework>', 'Force framework detection: react, nextjs, vue, svelte, angular')
140
+ .option('--no-prettier', 'Disable Prettier formatting')
141
+ .action(async (input, output, opts) => {
142
+ try {
143
+ const { deconvert } = await import('./deconverter.js');
144
+ logger.info(`Reverse converting ${resolve(input)} -> ${resolve(output)}`);
145
+ logger.info('');
146
+ const result = await deconvert({
147
+ input: resolve(input),
148
+ output: resolve(output),
149
+ framework: opts.framework,
150
+ prettier: opts.prettier !== false,
151
+ });
152
+ if (result.errors.length > 0) {
153
+ logger.error('Conversion completed with errors:');
154
+ for (const err of result.errors) {
155
+ logger.error(` ${err}`);
156
+ }
157
+ }
158
+ console.log('');
159
+ logger.info('Next steps:');
160
+ logger.info(` Open ${output}/index.html in your browser`);
161
+ logger.info(' Or serve with: npx serve ' + output);
162
+ }
163
+ catch (err) {
164
+ const message = err instanceof Error ? err.message : String(err);
165
+ logger.error(`Reverse conversion failed: ${message}`);
166
+ process.exit(1);
167
+ }
168
+ });
169
+ // ─── Chat command ───────────────────────────────────────────────────
170
+ program
171
+ .command('chat')
172
+ .description('Start an interactive AI chat session for your project (Claude Code-style TUI)')
173
+ .argument('[directory]', 'Project directory to work in (default: current directory)')
174
+ .action(async (directory) => {
175
+ const { startChat } = await import('./tui/chat.js');
176
+ await startChat(directory);
177
+ });
178
+ program.parse();
179
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { ConversionOptions, ConversionResult } from './types.js';
2
+ import { type ConversionReport } from './utils/report.js';
3
+ /**
4
+ * Main conversion pipeline: HTML/CSS/JS site -> modern framework project.
5
+ * Supports React (Vite), Next.js, Vue, Svelte, and Angular.
6
+ */
7
+ export declare function convert(options: ConversionOptions): Promise<ConversionResult & {
8
+ report?: ConversionReport;
9
+ }>;
10
+ //# sourceMappingURL=converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../src/converter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAc,MAAM,YAAY,CAAC;AAyBlF,OAAO,EAAgC,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIxF;;;GAGG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,GAAG;IAAE,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC,CAkxBnH"}