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,632 @@
1
+ /**
2
+ * Vue 3 (Vite) Framework Adapter
3
+ *
4
+ * Generates a Vite + Vue 3 + TypeScript project using Composition API.
5
+ * Converts React-style state/effects into Vue's ref(), onMounted(), watch(), etc.
6
+ */
7
+ import { mkdir, writeFile } from 'fs/promises';
8
+ import { join } from 'path';
9
+ import { toKebabCase, toValidIdentifier } from '../utils/naming.js';
10
+ import { implementPatterns } from '../generators/pattern-implementer.js';
11
+ export class VueAdapter {
12
+ name = 'Vite + Vue 3 + TypeScript';
13
+ target = 'vue';
14
+ componentExtension = '.vue';
15
+ async scaffoldProject(outputDir, projectName, options) {
16
+ const dirs = [
17
+ outputDir,
18
+ join(outputDir, 'src'),
19
+ join(outputDir, 'src', 'components'),
20
+ join(outputDir, 'src', 'assets'),
21
+ join(outputDir, 'src', 'styles'),
22
+ join(outputDir, 'public'),
23
+ ];
24
+ if (options.useRouter) {
25
+ dirs.push(join(outputDir, 'src', 'views'));
26
+ dirs.push(join(outputDir, 'src', 'router'));
27
+ }
28
+ for (const dir of dirs) {
29
+ await mkdir(dir, { recursive: true });
30
+ }
31
+ await Promise.all([
32
+ writeFile(join(outputDir, 'package.json'), this.generatePackageJson(projectName, options)),
33
+ writeFile(join(outputDir, 'tsconfig.json'), this.generateTsConfig()),
34
+ writeFile(join(outputDir, 'tsconfig.app.json'), this.generateTsConfigApp()),
35
+ writeFile(join(outputDir, 'tsconfig.node.json'), this.generateTsConfigNode()),
36
+ writeFile(join(outputDir, 'vite.config.ts'), this.generateViteConfig()),
37
+ writeFile(join(outputDir, 'index.html'), this.generateIndexHtml(options.title || projectName, options)),
38
+ writeFile(join(outputDir, 'src', 'main.ts'), this.generateMain(options)),
39
+ writeFile(join(outputDir, 'src', 'env.d.ts'), `/// <reference types="vite/client" />\n`),
40
+ writeFile(join(outputDir, '.gitignore'), `node_modules/\ndist/\n*.local\n.env\n`),
41
+ ]);
42
+ }
43
+ renderComponent(component, options) {
44
+ const lines = [];
45
+ // Script setup
46
+ const scriptImports = [];
47
+ const scriptBody = [];
48
+ // Determine Vue imports needed
49
+ const vueImports = new Set();
50
+ // State -> ref() (sanitize names for valid JS identifiers)
51
+ for (const sv of component.stateVars) {
52
+ vueImports.add('ref');
53
+ const safeName = toValidIdentifier(sv.name);
54
+ scriptBody.push(`const ${safeName} = ref(${sv.initialValue});`);
55
+ }
56
+ // Effects -> onMounted()
57
+ if (component.effects.length > 0) {
58
+ vueImports.add('onMounted');
59
+ for (const effect of component.effects) {
60
+ scriptBody.push(`onMounted(() => {\n ${effect}\n});`);
61
+ }
62
+ }
63
+ // Interactive patterns
64
+ let templateHtml = component.jsx;
65
+ if (options.analysis?.interactivePatterns) {
66
+ const patternResult = implementPatterns(templateHtml, options.analysis.interactivePatterns, options.customHooks);
67
+ templateHtml = patternResult.jsx;
68
+ for (const decl of patternResult.stateDeclarations) {
69
+ vueImports.add('ref');
70
+ // Convert useState to ref: const [x, setX] = useState(val) → const x = ref(val)
71
+ const match = decl.match(/\[(\w+),\s*\w+\]\s*=\s*useState(?:<[^>]*>)?\(([^)]*)\)/);
72
+ if (match) {
73
+ scriptBody.push(`const ${match[1]} = ref(${match[2]});`);
74
+ }
75
+ }
76
+ for (const handler of patternResult.handlers) {
77
+ // Convert React state setters to Vue ref .value mutations
78
+ let vueHandler = handler
79
+ .replace(/set(\w+)\(prev\s*=>\s*!prev\)/g, (_, name) => `${name.charAt(0).toLowerCase()}${name.slice(1)}.value = !${name.charAt(0).toLowerCase()}${name.slice(1)}.value`)
80
+ .replace(/set(\w+)\(prev\s*=>\s*prev\s*===\s*(\w+)\s*\?\s*null\s*:\s*(\w+)\)/g, (_, name, v1, v2) => `${name.charAt(0).toLowerCase()}${name.slice(1)}.value = ${name.charAt(0).toLowerCase()}${name.slice(1)}.value === ${v1} ? null : ${v2}`)
81
+ .replace(/set(\w+)\(([^)]+)\)/g, (_, name, val) => `${name.charAt(0).toLowerCase()}${name.slice(1)}.value = ${val}`);
82
+ scriptBody.push(vueHandler);
83
+ }
84
+ for (const hook of patternResult.additionalHooks) {
85
+ if (hook === 'useCallback') {
86
+ // No Vue equivalent needed, just use regular function
87
+ }
88
+ }
89
+ }
90
+ // Event handlers (sanitize DOM manipulation)
91
+ for (const eh of component.eventHandlers) {
92
+ const handlerName = `handle${eh.event.charAt(0).toUpperCase()}${eh.event.slice(1)}`;
93
+ const handlerLines = [];
94
+ for (const line of eh.handler.split('\n')) {
95
+ const trimmed = line.trim();
96
+ if (!trimmed)
97
+ continue;
98
+ // Convert classList.toggle('x') to ref toggle
99
+ const toggleMatch = trimmed.match(/\w+\.classList\.toggle\(['"]([^'"]+)['"]\)/);
100
+ if (toggleMatch) {
101
+ const cls = toggleMatch[1].replace(/\[.*?\]/g, '').replace(/[^a-zA-Z0-9]+/g, ' ').trim()
102
+ .split(/\s+/).map(w => w.charAt(0).toUpperCase() + w.slice(1)).join('');
103
+ if (cls) {
104
+ handlerLines.push(` is${cls}.value = !is${cls}.value;`);
105
+ continue;
106
+ }
107
+ }
108
+ // Skip raw DOM manipulation
109
+ if (/\.\s*(classList|style|innerHTML|textContent|appendChild|removeChild)\b/.test(trimmed) ||
110
+ /document\.(getElementById|querySelector|getElementsBy)/.test(trimmed)) {
111
+ handlerLines.push(` // TODO: ${trimmed}`);
112
+ continue;
113
+ }
114
+ handlerLines.push(` ${trimmed}`);
115
+ }
116
+ scriptBody.push(`const ${handlerName} = () => {\n${handlerLines.join('\n')}\n};`);
117
+ }
118
+ // Custom hook imports → Vue composables
119
+ this.addComposableImports(scriptImports, options);
120
+ // Hook calls
121
+ this.addComposableCalls(scriptBody, options, vueImports);
122
+ // Convert JSX template to Vue template
123
+ templateHtml = this.jsxToVueTemplate(templateHtml);
124
+ // Build the SFC
125
+ lines.push('<script setup lang="ts">');
126
+ if (vueImports.size > 0) {
127
+ lines.push(`import { ${Array.from(vueImports).join(', ')} } from 'vue';`);
128
+ }
129
+ for (const imp of scriptImports)
130
+ lines.push(imp);
131
+ if (scriptImports.length > 0 || vueImports.size > 0)
132
+ lines.push('');
133
+ for (const line of scriptBody) {
134
+ lines.push(line);
135
+ }
136
+ lines.push('</script>');
137
+ lines.push('');
138
+ lines.push('<template>');
139
+ lines.push(` <div>`);
140
+ for (const line of templateHtml.split('\n')) {
141
+ lines.push(` ${line}`);
142
+ }
143
+ lines.push(` </div>`);
144
+ lines.push('</template>');
145
+ lines.push('');
146
+ // CSS
147
+ if (component.css) {
148
+ lines.push(`<style${options.cssModules ? ' module' : ' scoped'}>`);
149
+ lines.push(component.css);
150
+ lines.push('</style>');
151
+ lines.push('');
152
+ }
153
+ return lines.join('\n');
154
+ }
155
+ generateAppEntry(options) {
156
+ const lines = [];
157
+ lines.push('<script setup lang="ts">');
158
+ for (const name of options.componentNames) {
159
+ const kebab = toKebabCase(name);
160
+ lines.push(`import ${name} from './components/${kebab}.vue';`);
161
+ }
162
+ lines.push('</script>');
163
+ lines.push('');
164
+ lines.push('<template>');
165
+ lines.push(' <div id="app">');
166
+ for (const name of options.componentNames) {
167
+ lines.push(` <${name} />`);
168
+ }
169
+ lines.push(' </div>');
170
+ lines.push('</template>');
171
+ lines.push('');
172
+ return lines.join('\n');
173
+ }
174
+ generateRouting(options) {
175
+ const files = new Map();
176
+ // Router index
177
+ const routerLines = [];
178
+ routerLines.push(`import { createRouter, createWebHistory } from 'vue-router';`);
179
+ routerLines.push('');
180
+ const routes = [];
181
+ for (let i = 0; i < options.componentNames.length; i++) {
182
+ const name = options.componentNames[i];
183
+ const fileName = options.fileNames[i];
184
+ const isIndex = /^index\.html?$/i.test(fileName);
185
+ const kebab = toKebabCase(name);
186
+ const path = options.routePaths?.[i] ?? (isIndex ? '/' : `/${kebab}`);
187
+ routes.push(` { path: '${path}', name: '${name}', component: () => import('../components/${kebab}.vue') }`);
188
+ }
189
+ routerLines.push('const router = createRouter({');
190
+ routerLines.push(' history: createWebHistory(),');
191
+ routerLines.push(' routes: [');
192
+ routerLines.push(routes.join(',\n'));
193
+ routerLines.push(' ],');
194
+ routerLines.push('});');
195
+ routerLines.push('');
196
+ routerLines.push('export default router;');
197
+ routerLines.push('');
198
+ files.set('router/index.ts', routerLines.join('\n'));
199
+ // App.vue with router-view
200
+ const appLines = [
201
+ '<template>',
202
+ ' <div id="app">',
203
+ ' <router-view />',
204
+ ' </div>',
205
+ '</template>',
206
+ '',
207
+ ];
208
+ files.set('App.vue', appLines.join('\n'));
209
+ return files;
210
+ }
211
+ generateHooks(neededHooks, interactivePatterns) {
212
+ const files = new Map();
213
+ // Generate Vue composables equivalent to React hooks
214
+ for (const hook of neededHooks) {
215
+ const composableName = hook; // keep same name for consistency
216
+ let content = '';
217
+ switch (hook) {
218
+ case 'useScrollReveal':
219
+ content = this.generateScrollRevealComposable(interactivePatterns);
220
+ break;
221
+ case 'useScrollClass':
222
+ content = this.generateScrollClassComposable();
223
+ break;
224
+ case 'useCounterAnimation':
225
+ content = this.generateCounterAnimationComposable();
226
+ break;
227
+ case 'useInterval':
228
+ content = this.generateIntervalComposable();
229
+ break;
230
+ case 'useTimeout':
231
+ content = this.generateTimeoutComposable();
232
+ break;
233
+ case 'useFetch':
234
+ content = this.generateFetchComposable();
235
+ break;
236
+ default:
237
+ continue;
238
+ }
239
+ if (content) {
240
+ files.set(`hooks/${composableName}.ts`, content);
241
+ }
242
+ }
243
+ return files;
244
+ }
245
+ generateErrorBoundary() {
246
+ return `<script setup lang="ts">
247
+ import { onErrorCaptured, ref } from 'vue';
248
+
249
+ const error = ref<Error | null>(null);
250
+
251
+ onErrorCaptured((err) => {
252
+ error.value = err instanceof Error ? err : new Error(String(err));
253
+ return false;
254
+ });
255
+
256
+ const reset = () => { error.value = null; };
257
+ </script>
258
+
259
+ <template>
260
+ <div v-if="error" style="padding: 2rem; text-align: center">
261
+ <h2>Something went wrong</h2>
262
+ <pre style="color: red; white-space: pre-wrap">{{ error.message }}</pre>
263
+ <button @click="reset">Try Again</button>
264
+ </div>
265
+ <slot v-else />
266
+ </template>
267
+ `;
268
+ }
269
+ // ── Private helpers ──────────────────────────────────────────────
270
+ /**
271
+ * Convert JSX syntax to Vue template syntax.
272
+ */
273
+ jsxToVueTemplate(jsx) {
274
+ let template = jsx;
275
+ // React Router <Link to="/path"> → Vue <router-link to="/path">
276
+ template = template.replace(/<Link\b([^>]*?)to="([^"]*)"([^>]*?)>([\s\S]*?)<\/Link>/g, (_m, before, path, after, content) => {
277
+ const cleanBefore = before.replace(/\s*className=/g, ' class=');
278
+ const cleanAfter = after.replace(/\s*className=/g, ' class=');
279
+ return `<router-link${cleanBefore}to="${path}"${cleanAfter}>${content}</router-link>`;
280
+ });
281
+ // className -> class
282
+ template = template.replace(/className=/g, 'class=');
283
+ // className={`... ${expr} ...`} -> :class="..."
284
+ template = template.replace(/class=\{`([^`]*)`\}/g, (_match, content) => {
285
+ // Convert template literal to Vue binding
286
+ const vueExpr = content.replace(/\$\{([^}]+)\}/g, "' + ($1) + '");
287
+ return `:class="'${vueExpr}'"`;
288
+ });
289
+ // onClick={handler} -> @click="handler"
290
+ template = template.replace(/onClick=\{(\w+)\}/g, '@click="$1"');
291
+ template = template.replace(/onClick=\{(?:\(\)\s*=>\s*)?(\w+)\(([^)]*)\)\s*\}/g, '@click="$1($2)"');
292
+ template = template.replace(/onChange=\{([^}]+)\}/g, '@change="$1"');
293
+ template = template.replace(/onSubmit=\{([^}]+)\}/g, '@submit.prevent="$1"');
294
+ template = template.replace(/onKeyDown=\{([^}]+)\}/g, '@keydown="$1"');
295
+ // style={{ prop: val }} -> :style="{ prop: val }"
296
+ template = template.replace(/style=\{\{([^}]*)\}\}/g, ':style="{ $1 }"');
297
+ // {condition ? 'a' : 'b'} in text -> Vue ternary (kept as-is with {{ }})
298
+ template = template.replace(/\{([^{}]+)\}/g, '{{ $1 }}');
299
+ // htmlFor -> for
300
+ template = template.replace(/htmlFor=/g, 'for=');
301
+ // Self-closing tags that Vue doesn't allow
302
+ // (Vue 3 actually supports self-closing for all elements, so this is fine)
303
+ // dangerouslySetInnerHTML -> v-html
304
+ template = template.replace(/dangerouslySetInnerHTML=\{\{__html:\s*([^}]+)\}\}/g, 'v-html="$1"');
305
+ return template;
306
+ }
307
+ addComposableImports(imports, options) {
308
+ const ip = options.analysis?.interactivePatterns;
309
+ if (ip?.scrollReveals?.length && options.customHooks.includes('useScrollReveal')) {
310
+ imports.push(`import { useScrollReveal } from '../hooks/useScrollReveal';`);
311
+ }
312
+ if (ip?.scrollClasses?.length && options.customHooks.includes('useScrollClass')) {
313
+ imports.push(`import { useScrollClass } from '../hooks/useScrollClass';`);
314
+ }
315
+ if (ip?.counterAnimations?.length && options.customHooks.includes('useCounterAnimation')) {
316
+ imports.push(`import { useCounterAnimation } from '../hooks/useCounterAnimation';`);
317
+ }
318
+ }
319
+ addComposableCalls(body, options, vueImports) {
320
+ const ip = options.analysis?.interactivePatterns;
321
+ if (!ip)
322
+ return;
323
+ if (ip.scrollReveals.length > 0 && options.customHooks.includes('useScrollReveal')) {
324
+ for (const sr of ip.scrollReveals) {
325
+ const mode = sr.property === 'animationPlayState' ? 'animation' : 'class';
326
+ body.push(`useScrollReveal('${sr.selector}', ${sr.threshold}, '${mode}');`);
327
+ }
328
+ }
329
+ if (ip.scrollClasses.length > 0 && options.customHooks.includes('useScrollClass')) {
330
+ for (const sc of ip.scrollClasses) {
331
+ body.push(`useScrollClass('${sc.elementSelector}', '${sc.className}', ${sc.threshold});`);
332
+ }
333
+ }
334
+ if (ip.counterAnimations.length > 0 && options.customHooks.includes('useCounterAnimation')) {
335
+ for (const ca of ip.counterAnimations) {
336
+ body.push(`useCounterAnimation('${ca.selector}');`);
337
+ }
338
+ }
339
+ }
340
+ generateScrollRevealComposable(patterns) {
341
+ const threshold = patterns.scrollReveals[0]?.threshold ?? 0.1;
342
+ return `import { onMounted, onUnmounted } from 'vue';
343
+
344
+ export function useScrollReveal(
345
+ selector: string,
346
+ threshold = ${threshold},
347
+ mode: 'animation' | 'class' = 'animation',
348
+ className = 'revealed'
349
+ ) {
350
+ let observer: IntersectionObserver | null = null;
351
+
352
+ onMounted(() => {
353
+ const elements = document.querySelectorAll<HTMLElement>(selector);
354
+ if (elements.length === 0) return;
355
+
356
+ if (mode === 'animation') {
357
+ elements.forEach((el) => { el.style.animationPlayState = 'paused'; });
358
+ }
359
+
360
+ observer = new IntersectionObserver(
361
+ (entries) => {
362
+ entries.forEach((entry) => {
363
+ if (entry.isIntersecting) {
364
+ const el = entry.target as HTMLElement;
365
+ if (mode === 'animation') {
366
+ el.style.animationPlayState = 'running';
367
+ } else {
368
+ el.classList.add(className);
369
+ }
370
+ observer?.unobserve(el);
371
+ }
372
+ });
373
+ },
374
+ { threshold }
375
+ );
376
+
377
+ elements.forEach((el) => observer!.observe(el));
378
+ });
379
+
380
+ onUnmounted(() => { observer?.disconnect(); });
381
+ }
382
+ `;
383
+ }
384
+ generateScrollClassComposable() {
385
+ return `import { onMounted, onUnmounted } from 'vue';
386
+
387
+ export function useScrollClass(selector: string, className: string, threshold = 50) {
388
+ let handler: (() => void) | null = null;
389
+
390
+ onMounted(() => {
391
+ const el = document.querySelector(selector);
392
+ if (!el) return;
393
+
394
+ handler = () => {
395
+ if (window.scrollY > threshold) {
396
+ el.classList.add(className);
397
+ } else {
398
+ el.classList.remove(className);
399
+ }
400
+ };
401
+
402
+ window.addEventListener('scroll', handler, { passive: true });
403
+ handler();
404
+ });
405
+
406
+ onUnmounted(() => {
407
+ if (handler) window.removeEventListener('scroll', handler);
408
+ });
409
+ }
410
+ `;
411
+ }
412
+ generateCounterAnimationComposable() {
413
+ return `import { onMounted, onUnmounted } from 'vue';
414
+
415
+ export function useCounterAnimation(selector: string) {
416
+ let observer: IntersectionObserver | null = null;
417
+ const timers: ReturnType<typeof setInterval>[] = [];
418
+
419
+ onMounted(() => {
420
+ const elements = document.querySelectorAll<HTMLElement>(selector);
421
+ if (elements.length === 0) return;
422
+
423
+ observer = new IntersectionObserver(
424
+ (entries) => {
425
+ entries.forEach((entry) => {
426
+ if (entry.isIntersecting) {
427
+ const el = entry.target as HTMLElement;
428
+ const target = parseInt(el.getAttribute('data-target') || el.textContent || '0', 10);
429
+ let count = 0;
430
+ const steps = 40;
431
+ const step = target / steps;
432
+
433
+ const timer = setInterval(() => {
434
+ count = Math.min(count + step, target);
435
+ el.textContent = Math.floor(count).toLocaleString();
436
+ if (count >= target) clearInterval(timer);
437
+ }, 28);
438
+
439
+ timers.push(timer);
440
+ observer?.unobserve(el);
441
+ }
442
+ });
443
+ },
444
+ { threshold: 0.5 }
445
+ );
446
+
447
+ elements.forEach((el) => observer!.observe(el));
448
+ });
449
+
450
+ onUnmounted(() => {
451
+ observer?.disconnect();
452
+ timers.forEach(t => clearInterval(t));
453
+ });
454
+ }
455
+ `;
456
+ }
457
+ generateIntervalComposable() {
458
+ return `import { onMounted, onUnmounted } from 'vue';
459
+
460
+ export function useInterval(callback: () => void, delay: number | null) {
461
+ let id: ReturnType<typeof setInterval> | null = null;
462
+
463
+ onMounted(() => {
464
+ if (delay === null) return;
465
+ id = setInterval(callback, delay);
466
+ });
467
+
468
+ onUnmounted(() => { if (id !== null) clearInterval(id); });
469
+ }
470
+ `;
471
+ }
472
+ generateTimeoutComposable() {
473
+ return `import { onMounted, onUnmounted } from 'vue';
474
+
475
+ export function useTimeout(callback: () => void, delay: number | null) {
476
+ let id: ReturnType<typeof setTimeout> | null = null;
477
+
478
+ onMounted(() => {
479
+ if (delay === null) return;
480
+ id = setTimeout(callback, delay);
481
+ });
482
+
483
+ onUnmounted(() => { if (id !== null) clearTimeout(id); });
484
+ }
485
+ `;
486
+ }
487
+ generateFetchComposable() {
488
+ return `import { ref, onMounted } from 'vue';
489
+
490
+ export function useFetch<T = unknown>(url: string, options?: RequestInit) {
491
+ const data = ref<T | null>(null);
492
+ const loading = ref(true);
493
+ const error = ref<string | null>(null);
494
+
495
+ onMounted(async () => {
496
+ try {
497
+ const response = await fetch(url, options);
498
+ if (!response.ok) throw new Error(\`HTTP \${response.status}\`);
499
+ data.value = await response.json();
500
+ } catch (err) {
501
+ error.value = (err as Error).message;
502
+ } finally {
503
+ loading.value = false;
504
+ }
505
+ });
506
+
507
+ return { data, loading, error };
508
+ }
509
+ `;
510
+ }
511
+ generatePackageJson(name, options) {
512
+ const deps = {
513
+ vue: '^3.5.0',
514
+ };
515
+ if (options.useRouter)
516
+ deps['vue-router'] = '^4.4.0';
517
+ return JSON.stringify({
518
+ name: name.toLowerCase().replace(/[^a-z0-9-]/g, '-'),
519
+ private: true,
520
+ version: '0.0.0',
521
+ type: 'module',
522
+ scripts: {
523
+ dev: 'vite',
524
+ build: 'vue-tsc -b && vite build',
525
+ preview: 'vite preview',
526
+ },
527
+ dependencies: deps,
528
+ devDependencies: {
529
+ '@vitejs/plugin-vue': '^5.2.0',
530
+ typescript: '^5.7.0',
531
+ vite: '^6.0.0',
532
+ 'vue-tsc': '^2.2.0',
533
+ ...(options.useTailwind ? {
534
+ tailwindcss: '^4.0.0',
535
+ '@tailwindcss/postcss': '^4.0.0',
536
+ postcss: '^8.4.0',
537
+ } : {}),
538
+ },
539
+ }, null, 2);
540
+ }
541
+ generateTsConfig() {
542
+ return JSON.stringify({
543
+ files: [],
544
+ references: [
545
+ { path: './tsconfig.app.json' },
546
+ { path: './tsconfig.node.json' },
547
+ ],
548
+ }, null, 2);
549
+ }
550
+ generateTsConfigApp() {
551
+ return JSON.stringify({
552
+ compilerOptions: {
553
+ target: 'ES2020',
554
+ useDefineForClassFields: true,
555
+ module: 'ESNext',
556
+ lib: ['ES2020', 'DOM', 'DOM.Iterable'],
557
+ skipLibCheck: true,
558
+ moduleResolution: 'bundler',
559
+ allowImportingTsExtensions: true,
560
+ isolatedModules: true,
561
+ moduleDetection: 'force',
562
+ noEmit: true,
563
+ jsx: 'preserve',
564
+ strict: true,
565
+ noUnusedLocals: false,
566
+ noUnusedParameters: false,
567
+ },
568
+ include: ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.vue'],
569
+ }, null, 2);
570
+ }
571
+ generateTsConfigNode() {
572
+ return JSON.stringify({
573
+ compilerOptions: {
574
+ target: 'ES2022',
575
+ lib: ['ES2023'],
576
+ module: 'ESNext',
577
+ skipLibCheck: true,
578
+ moduleResolution: 'bundler',
579
+ allowImportingTsExtensions: true,
580
+ isolatedModules: true,
581
+ moduleDetection: 'force',
582
+ noEmit: true,
583
+ strict: true,
584
+ },
585
+ include: ['vite.config.ts'],
586
+ }, null, 2);
587
+ }
588
+ generateViteConfig() {
589
+ return `import { defineConfig } from 'vite'
590
+ import vue from '@vitejs/plugin-vue'
591
+
592
+ export default defineConfig({
593
+ plugins: [vue()],
594
+ })
595
+ `;
596
+ }
597
+ generateIndexHtml(title, options) {
598
+ const extStyles = (options.externalStyles || []).map(href => ` <link rel="stylesheet" href="${href}" />`).join('\n');
599
+ return `<!doctype html>
600
+ <html lang="en">
601
+ <head>
602
+ <meta charset="UTF-8" />
603
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
604
+ <title>${title}</title>
605
+ ${extStyles}
606
+ </head>
607
+ <body>
608
+ <div id="app"></div>
609
+ <script type="module" src="/src/main.ts"></script>
610
+ </body>
611
+ </html>
612
+ `;
613
+ }
614
+ generateMain(options) {
615
+ if (options.useRouter) {
616
+ return `import { createApp } from 'vue'
617
+ import App from './App.vue'
618
+ import router from './router'
619
+ ${options.useTailwind ? "import './styles/tailwind.css'\n" : ''}
620
+ const app = createApp(App)
621
+ app.use(router)
622
+ app.mount('#app')
623
+ `;
624
+ }
625
+ return `import { createApp } from 'vue'
626
+ import App from './App.vue'
627
+ ${options.useTailwind ? "import './styles/tailwind.css'\n" : ''}
628
+ createApp(App).mount('#app')
629
+ `;
630
+ }
631
+ }
632
+ //# sourceMappingURL=vue-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vue-adapter.js","sourceRoot":"","sources":["../../src/frameworks/vue-adapter.ts"],"names":[],"mappings":"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"}