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,617 @@
1
+ /**
2
+ * Angular Framework Adapter
3
+ *
4
+ * Generates an Angular CLI + TypeScript project.
5
+ * Converts React state/effects into Angular signals, lifecycle hooks, and template syntax.
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 AngularAdapter {
12
+ name = 'Angular + TypeScript';
13
+ target = 'angular';
14
+ componentExtension = '.ts'; // Angular components are .ts files
15
+ async scaffoldProject(outputDir, projectName, options) {
16
+ const dirs = [
17
+ outputDir,
18
+ join(outputDir, 'src'),
19
+ join(outputDir, 'src', 'app'),
20
+ join(outputDir, 'src', 'app', 'components'),
21
+ join(outputDir, 'src', 'app', 'services'),
22
+ join(outputDir, 'src', 'assets'),
23
+ join(outputDir, 'src', 'styles'),
24
+ ];
25
+ for (const dir of dirs) {
26
+ await mkdir(dir, { recursive: true });
27
+ }
28
+ const safeName = projectName.toLowerCase().replace(/[^a-z0-9-]/g, '-');
29
+ await Promise.all([
30
+ writeFile(join(outputDir, 'package.json'), this.generatePackageJson(safeName, options)),
31
+ writeFile(join(outputDir, 'tsconfig.json'), this.generateTsConfig()),
32
+ writeFile(join(outputDir, 'tsconfig.app.json'), this.generateTsConfigApp()),
33
+ writeFile(join(outputDir, 'angular.json'), this.generateAngularJson(safeName)),
34
+ writeFile(join(outputDir, 'src', 'index.html'), this.generateIndexHtml(options.title || projectName, options)),
35
+ writeFile(join(outputDir, 'src', 'main.ts'), this.generateMain()),
36
+ writeFile(join(outputDir, 'src', 'styles.css'), '/* Global styles */\n'),
37
+ writeFile(join(outputDir, '.gitignore'), `node_modules/\ndist/\n.angular/\n.env\n`),
38
+ ]);
39
+ }
40
+ renderComponent(component, options) {
41
+ const kebab = toKebabCase(component.name);
42
+ const lines = [];
43
+ // Imports
44
+ const angularImports = new Set(['Component']);
45
+ const signalImports = new Set();
46
+ const classBody = [];
47
+ // State -> Angular signals (sanitize names)
48
+ for (const sv of component.stateVars) {
49
+ signalImports.add('signal');
50
+ const safeName = toValidIdentifier(sv.name);
51
+ classBody.push(` ${safeName} = signal(${sv.initialValue});`);
52
+ }
53
+ // Interactive patterns
54
+ let templateHtml = component.jsx;
55
+ if (options.analysis?.interactivePatterns) {
56
+ const patternResult = implementPatterns(templateHtml, options.analysis.interactivePatterns, options.customHooks);
57
+ templateHtml = patternResult.jsx;
58
+ for (const decl of patternResult.stateDeclarations) {
59
+ signalImports.add('signal');
60
+ const match = decl.match(/\[(\w+),\s*\w+\]\s*=\s*useState(?:<[^>]*>)?\(([^)]*)\)/);
61
+ if (match) {
62
+ classBody.push(` ${match[1]} = signal(${match[2]});`);
63
+ }
64
+ }
65
+ for (const handler of patternResult.handlers) {
66
+ // Convert to Angular method: const fnName = (...) => { ... } → fnName(...) { ... }
67
+ let angularHandler = handler
68
+ .replace(/const\s+(\w+)\s*=\s*(?:\([^)]*\)|[^=]*)\s*=>\s*\{/, '$1() {')
69
+ .replace(/const\s+(\w+)\s*=\s*\(([^)]*)\)\s*=>\s*\{/, '$1($2) {')
70
+ // Convert state setters to signal updates
71
+ .replace(/set(\w+)\(prev\s*=>\s*!prev\)/g, (_, name) => `this.${name.charAt(0).toLowerCase()}${name.slice(1)}.update(v => !v)`)
72
+ .replace(/set(\w+)\(prev\s*=>\s*prev\s*===\s*(\w+)\s*\?\s*null\s*:\s*(\w+)\)/g, (_, name, v1, v2) => `this.${name.charAt(0).toLowerCase()}${name.slice(1)}.update(v => v === ${v1} ? null : ${v2})`)
73
+ .replace(/set(\w+)\(([^)]+)\)/g, (_, name, val) => `this.${name.charAt(0).toLowerCase()}${name.slice(1)}.set(${val})`);
74
+ classBody.push(` ${angularHandler}`);
75
+ }
76
+ }
77
+ // Effects -> ngOnInit + ngOnDestroy
78
+ if (component.effects.length > 0) {
79
+ angularImports.add('OnInit');
80
+ angularImports.add('OnDestroy');
81
+ }
82
+ // Event handlers (sanitize DOM manipulation)
83
+ for (const eh of component.eventHandlers) {
84
+ const handlerName = `handle${eh.event.charAt(0).toUpperCase()}${eh.event.slice(1)}`;
85
+ classBody.push(` ${handlerName}() {`);
86
+ for (const line of eh.handler.split('\n')) {
87
+ const trimmed = line.trim();
88
+ if (!trimmed)
89
+ continue;
90
+ // Convert classList.toggle('x') to signal toggle
91
+ const toggleMatch = trimmed.match(/\w+\.classList\.toggle\(['"]([^'"]+)['"]\)/);
92
+ if (toggleMatch) {
93
+ const cls = toggleMatch[1].replace(/\[.*?\]/g, '').replace(/[^a-zA-Z0-9]+/g, ' ').trim()
94
+ .split(/\s+/).map(w => w.charAt(0).toUpperCase() + w.slice(1)).join('');
95
+ if (cls) {
96
+ classBody.push(` this.is${cls}.update(v => !v);`);
97
+ continue;
98
+ }
99
+ }
100
+ // Skip raw DOM manipulation
101
+ if (/\.\s*(classList|style|innerHTML|textContent|appendChild|removeChild)\b/.test(trimmed) ||
102
+ /document\.(getElementById|querySelector|getElementsBy)/.test(trimmed)) {
103
+ classBody.push(` // TODO: ${trimmed}`);
104
+ continue;
105
+ }
106
+ classBody.push(` ${trimmed}`);
107
+ }
108
+ classBody.push(' }');
109
+ classBody.push('');
110
+ }
111
+ // Composable service calls
112
+ this.addServiceCalls(classBody, options, angularImports);
113
+ // Convert JSX to Angular template
114
+ templateHtml = this.jsxToAngularTemplate(templateHtml);
115
+ // Signal imports
116
+ if (signalImports.size > 0) {
117
+ for (const s of signalImports)
118
+ angularImports.add(s);
119
+ }
120
+ // Build the component file
121
+ lines.push(`import { ${Array.from(angularImports).join(', ')} } from '@angular/core';`);
122
+ // Sub-component imports
123
+ const componentImports = [];
124
+ for (const subName of options.subComponentImports || []) {
125
+ const subKebab = toKebabCase(subName);
126
+ lines.push(`import { ${subName}Component } from './${subKebab}/${subKebab}.component';`);
127
+ componentImports.push(`${subName}Component`);
128
+ }
129
+ // Detect if template uses routerLink (from hash route link conversion)
130
+ const usesRouterLink = /routerLink=/.test(templateHtml);
131
+ if (usesRouterLink) {
132
+ lines.push(`import { RouterModule } from '@angular/router';`);
133
+ componentImports.push('RouterModule');
134
+ }
135
+ lines.push('');
136
+ lines.push('@Component({');
137
+ lines.push(` selector: 'app-${kebab}',`);
138
+ lines.push(' standalone: true,');
139
+ if (componentImports.length > 0) {
140
+ lines.push(` imports: [${componentImports.join(', ')}],`);
141
+ }
142
+ lines.push(' template: `');
143
+ for (const line of templateHtml.split('\n')) {
144
+ lines.push(` ${line}`);
145
+ }
146
+ lines.push(' `,');
147
+ if (component.css) {
148
+ lines.push(' styles: [`');
149
+ lines.push(component.css);
150
+ lines.push(' `],');
151
+ }
152
+ lines.push('})');
153
+ // Class declaration
154
+ const interfaces = [];
155
+ if (component.effects.length > 0)
156
+ interfaces.push('OnInit', 'OnDestroy');
157
+ const implStr = interfaces.length > 0 ? ` implements ${interfaces.join(', ')}` : '';
158
+ lines.push(`export class ${component.name}Component${implStr} {`);
159
+ for (const line of classBody)
160
+ lines.push(line);
161
+ // Lifecycle hooks
162
+ if (component.effects.length > 0) {
163
+ lines.push('');
164
+ lines.push(' ngOnInit() {');
165
+ for (const effect of component.effects) {
166
+ for (const line of effect.split('\n')) {
167
+ if (line.trim())
168
+ lines.push(` ${line.trim()}`);
169
+ }
170
+ }
171
+ lines.push(' }');
172
+ lines.push('');
173
+ lines.push(' ngOnDestroy() {');
174
+ lines.push(' // Cleanup');
175
+ lines.push(' }');
176
+ }
177
+ lines.push('}');
178
+ lines.push('');
179
+ return lines.join('\n');
180
+ }
181
+ generateAppEntry(options) {
182
+ const lines = [];
183
+ lines.push(`import { Component } from '@angular/core';`);
184
+ const imports = [];
185
+ for (const name of options.componentNames) {
186
+ const kebab = toKebabCase(name);
187
+ lines.push(`import { ${name}Component } from './components/${kebab}/${kebab}.component';`);
188
+ imports.push(`${name}Component`);
189
+ }
190
+ lines.push('');
191
+ lines.push('@Component({');
192
+ lines.push(" selector: 'app-root',");
193
+ lines.push(' standalone: true,');
194
+ lines.push(` imports: [${imports.join(', ')}],`);
195
+ lines.push(' template: `');
196
+ for (const name of options.componentNames) {
197
+ const kebab = toKebabCase(name);
198
+ lines.push(` <app-${kebab} />`);
199
+ }
200
+ lines.push(' `,');
201
+ lines.push('})');
202
+ lines.push(`export class AppComponent {`);
203
+ lines.push(` title = 'Converted App';`);
204
+ lines.push('}');
205
+ lines.push('');
206
+ return lines.join('\n');
207
+ }
208
+ generateRouting(options) {
209
+ const files = new Map();
210
+ // app.routes.ts
211
+ const routeLines = [];
212
+ routeLines.push(`import { Routes } from '@angular/router';`);
213
+ routeLines.push('');
214
+ routeLines.push('export const routes: Routes = [');
215
+ for (let i = 0; i < options.componentNames.length; i++) {
216
+ const name = options.componentNames[i];
217
+ const fileName = options.fileNames[i];
218
+ const isIndex = /^index\.html?$/i.test(fileName);
219
+ const kebab = toKebabCase(name);
220
+ const path = options.routePaths?.[i]
221
+ ? (options.routePaths[i] === '/' ? '' : options.routePaths[i].replace(/^\//, ''))
222
+ : (isIndex ? '' : kebab);
223
+ routeLines.push(` {`);
224
+ routeLines.push(` path: '${path}',`);
225
+ routeLines.push(` loadComponent: () => import('./components/${kebab}/${kebab}.component').then(m => m.${name}Component),`);
226
+ routeLines.push(` },`);
227
+ }
228
+ routeLines.push(` { path: '**', redirectTo: '' },`);
229
+ routeLines.push('];');
230
+ routeLines.push('');
231
+ files.set('app/app.routes.ts', routeLines.join('\n'));
232
+ // app.config.ts with router
233
+ const configLines = [
234
+ `import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';`,
235
+ `import { provideRouter } from '@angular/router';`,
236
+ `import { routes } from './app.routes';`,
237
+ '',
238
+ 'export const appConfig: ApplicationConfig = {',
239
+ ' providers: [',
240
+ ' provideZoneChangeDetection({ eventCoalescing: true }),',
241
+ ' provideRouter(routes),',
242
+ ' ],',
243
+ '};',
244
+ '',
245
+ ];
246
+ files.set('app/app.config.ts', configLines.join('\n'));
247
+ return files;
248
+ }
249
+ generateHooks(neededHooks, interactivePatterns) {
250
+ const files = new Map();
251
+ // Angular uses services for shared logic
252
+ for (const hook of neededHooks) {
253
+ let content = '';
254
+ switch (hook) {
255
+ case 'useScrollReveal':
256
+ content = this.generateScrollRevealService(interactivePatterns);
257
+ break;
258
+ case 'useScrollClass':
259
+ content = this.generateScrollClassService();
260
+ break;
261
+ case 'useCounterAnimation':
262
+ content = this.generateCounterAnimationService();
263
+ break;
264
+ case 'useFetch':
265
+ content = this.generateFetchService();
266
+ break;
267
+ default:
268
+ continue;
269
+ }
270
+ if (content) {
271
+ const serviceName = hook.replace(/^use/, '').charAt(0).toLowerCase() + hook.replace(/^use/, '').slice(1);
272
+ files.set(`app/services/${toKebabCase(serviceName)}.service.ts`, content);
273
+ }
274
+ }
275
+ return files;
276
+ }
277
+ generateErrorBoundary() {
278
+ return `import { Component, ErrorHandler, Injectable } from '@angular/core';
279
+
280
+ @Injectable()
281
+ export class GlobalErrorHandler implements ErrorHandler {
282
+ handleError(error: unknown) {
283
+ console.error('Global error:', error);
284
+ }
285
+ }
286
+
287
+ @Component({
288
+ selector: 'app-error',
289
+ standalone: true,
290
+ template: \`
291
+ <div style="padding: 2rem; text-align: center">
292
+ <h2>Something went wrong</h2>
293
+ <p>Please try refreshing the page.</p>
294
+ </div>
295
+ \`,
296
+ })
297
+ export class ErrorComponent {}
298
+ `;
299
+ }
300
+ // ── Private helpers ───────────���──────────────────────────────────
301
+ jsxToAngularTemplate(jsx) {
302
+ let template = jsx;
303
+ // React Router <Link to="/path"> → Angular <a routerLink="/path">
304
+ template = template.replace(/<Link\b([^>]*?)to="([^"]*)"([^>]*?)>([\s\S]*?)<\/Link>/g, (_m, before, path, after, content) => {
305
+ const cleanBefore = before.replace(/\s*className=/g, ' class=');
306
+ const cleanAfter = after.replace(/\s*className=/g, ' class=');
307
+ return `<a${cleanBefore}routerLink="${path}"${cleanAfter}>${content}</a>`;
308
+ });
309
+ // className -> class
310
+ template = template.replace(/className=/g, 'class=');
311
+ // className={`... ${expr} ...`} -> [class]="..."
312
+ template = template.replace(/class=\{`([^`]*)`\}/g, (_match, content) => {
313
+ const expr = content.replace(/\$\{([^}]+)\}/g, "' + ($1) + '");
314
+ return `[class]="'${expr}'"`;
315
+ });
316
+ // onClick={handler} -> (click)="handler()"
317
+ template = template.replace(/onClick=\{(\w+)\}/g, '(click)="$1()"');
318
+ template = template.replace(/onClick=\{(?:\(\)\s*=>\s*)?(\w+)\(([^)]*)\)\s*\}/g, '(click)="$1($2)"');
319
+ template = template.replace(/onChange=\{([^}]+)\}/g, '(change)="$1"');
320
+ template = template.replace(/onSubmit=\{([^}]+)\}/g, '(ngSubmit)="$1"');
321
+ template = template.replace(/onKeyDown=\{([^}]+)\}/g, '(keydown)="$1"');
322
+ // style={{ prop: val }} -> [ngStyle]="{ prop: val }"
323
+ template = template.replace(/style=\{\{([^}]*)\}\}/g, '[ngStyle]="{$1}"');
324
+ // {expr} in text -> {{ expr }}
325
+ // But be careful not to double-convert Angular bindings
326
+ template = template.replace(/\{([^{}]+)\}/g, (match, expr) => {
327
+ // Skip if it's already an Angular binding or event
328
+ if (match.startsWith('(') || match.startsWith('['))
329
+ return match;
330
+ return `{{ ${expr.trim()} }}`;
331
+ });
332
+ // value={expr} -> [value]="expr"
333
+ template = template.replace(/value=\{([^}]+)\}/g, '[value]="$1"');
334
+ // htmlFor -> for
335
+ template = template.replace(/htmlFor=/g, 'for=');
336
+ // Convert signal reads: stateVar -> stateVar()
337
+ // This is handled at template level for Angular signals
338
+ return template;
339
+ }
340
+ addServiceCalls(body, options, imports) {
341
+ const ip = options.analysis?.interactivePatterns;
342
+ if (!ip)
343
+ return;
344
+ // Angular services are typically injected via constructor
345
+ // For simplicity, we'll use direct DOM calls similar to other adapters
346
+ if (ip.scrollReveals.length > 0 || ip.scrollClasses.length > 0 || ip.counterAnimations.length > 0) {
347
+ imports.add('AfterViewInit');
348
+ }
349
+ }
350
+ generateScrollRevealService(patterns) {
351
+ const threshold = patterns.scrollReveals[0]?.threshold ?? 0.1;
352
+ return `import { Injectable } from '@angular/core';
353
+
354
+ @Injectable({ providedIn: 'root' })
355
+ export class ScrollRevealService {
356
+ private observer: IntersectionObserver | null = null;
357
+
358
+ init(selector: string, threshold = ${threshold}, mode: 'animation' | 'class' = 'animation', className = 'revealed') {
359
+ const elements = document.querySelectorAll<HTMLElement>(selector);
360
+ if (elements.length === 0) return;
361
+
362
+ if (mode === 'animation') {
363
+ elements.forEach((el) => { el.style.animationPlayState = 'paused'; });
364
+ }
365
+
366
+ this.observer = new IntersectionObserver(
367
+ (entries) => {
368
+ entries.forEach((entry) => {
369
+ if (entry.isIntersecting) {
370
+ const el = entry.target as HTMLElement;
371
+ if (mode === 'animation') {
372
+ el.style.animationPlayState = 'running';
373
+ } else {
374
+ el.classList.add(className);
375
+ }
376
+ this.observer?.unobserve(el);
377
+ }
378
+ });
379
+ },
380
+ { threshold }
381
+ );
382
+
383
+ elements.forEach((el) => this.observer!.observe(el));
384
+ }
385
+
386
+ destroy() {
387
+ this.observer?.disconnect();
388
+ }
389
+ }
390
+ `;
391
+ }
392
+ generateScrollClassService() {
393
+ return `import { Injectable } from '@angular/core';
394
+
395
+ @Injectable({ providedIn: 'root' })
396
+ export class ScrollClassService {
397
+ private handler: (() => void) | null = null;
398
+
399
+ init(selector: string, className: string, threshold = 50) {
400
+ const el = document.querySelector(selector);
401
+ if (!el) return;
402
+
403
+ this.handler = () => {
404
+ if (window.scrollY > threshold) {
405
+ el.classList.add(className);
406
+ } else {
407
+ el.classList.remove(className);
408
+ }
409
+ };
410
+
411
+ window.addEventListener('scroll', this.handler, { passive: true });
412
+ this.handler();
413
+ }
414
+
415
+ destroy() {
416
+ if (this.handler) window.removeEventListener('scroll', this.handler);
417
+ }
418
+ }
419
+ `;
420
+ }
421
+ generateCounterAnimationService() {
422
+ return `import { Injectable } from '@angular/core';
423
+
424
+ @Injectable({ providedIn: 'root' })
425
+ export class CounterAnimationService {
426
+ private observer: IntersectionObserver | null = null;
427
+ private timers: ReturnType<typeof setInterval>[] = [];
428
+
429
+ init(selector: string) {
430
+ const elements = document.querySelectorAll<HTMLElement>(selector);
431
+ if (elements.length === 0) return;
432
+
433
+ this.observer = new IntersectionObserver(
434
+ (entries) => {
435
+ entries.forEach((entry) => {
436
+ if (entry.isIntersecting) {
437
+ const el = entry.target as HTMLElement;
438
+ const target = parseInt(el.getAttribute('data-target') || el.textContent || '0', 10);
439
+ let count = 0;
440
+ const steps = 40;
441
+ const step = target / steps;
442
+
443
+ const timer = setInterval(() => {
444
+ count = Math.min(count + step, target);
445
+ el.textContent = Math.floor(count).toLocaleString();
446
+ if (count >= target) clearInterval(timer);
447
+ }, 28);
448
+
449
+ this.timers.push(timer);
450
+ this.observer?.unobserve(el);
451
+ }
452
+ });
453
+ },
454
+ { threshold: 0.5 }
455
+ );
456
+
457
+ elements.forEach((el) => this.observer!.observe(el));
458
+ }
459
+
460
+ destroy() {
461
+ this.observer?.disconnect();
462
+ this.timers.forEach(t => clearInterval(t));
463
+ }
464
+ }
465
+ `;
466
+ }
467
+ generateFetchService() {
468
+ return `import { Injectable } from '@angular/core';
469
+ import { HttpClient } from '@angular/common/http';
470
+ import { Observable, catchError, of } from 'rxjs';
471
+
472
+ @Injectable({ providedIn: 'root' })
473
+ export class FetchService {
474
+ constructor(private http: HttpClient) {}
475
+
476
+ get<T>(url: string): Observable<T | null> {
477
+ return this.http.get<T>(url).pipe(
478
+ catchError(err => {
479
+ console.error('Fetch error:', err);
480
+ return of(null);
481
+ })
482
+ );
483
+ }
484
+ }
485
+ `;
486
+ }
487
+ generatePackageJson(name, options) {
488
+ return JSON.stringify({
489
+ name,
490
+ private: true,
491
+ version: '0.0.0',
492
+ scripts: {
493
+ ng: 'ng',
494
+ dev: 'ng serve',
495
+ start: 'ng serve',
496
+ build: 'ng build',
497
+ },
498
+ dependencies: {
499
+ '@angular/animations': '^19.0.0',
500
+ '@angular/common': '^19.0.0',
501
+ '@angular/compiler': '^19.0.0',
502
+ '@angular/core': '^19.0.0',
503
+ '@angular/forms': '^19.0.0',
504
+ '@angular/platform-browser': '^19.0.0',
505
+ '@angular/platform-browser-dynamic': '^19.0.0',
506
+ '@angular/router': '^19.0.0',
507
+ rxjs: '~7.8.0',
508
+ 'zone.js': '~0.15.0',
509
+ tslib: '^2.6.0',
510
+ },
511
+ devDependencies: {
512
+ '@angular-devkit/build-angular': '^19.0.0',
513
+ '@angular/cli': '^19.0.0',
514
+ '@angular/compiler-cli': '^19.0.0',
515
+ typescript: '^5.7.0',
516
+ },
517
+ }, null, 2);
518
+ }
519
+ generateTsConfig() {
520
+ return JSON.stringify({
521
+ compileOnSave: false,
522
+ compilerOptions: {
523
+ outDir: './dist/out-tsc',
524
+ forceConsistentCasingInFileNames: true,
525
+ strict: true,
526
+ noImplicitOverride: true,
527
+ noPropertyAccessFromIndexSignature: true,
528
+ noImplicitReturns: true,
529
+ noFallthroughCasesInSwitch: true,
530
+ sourceMap: true,
531
+ declaration: false,
532
+ downlevelIteration: true,
533
+ experimentalDecorators: true,
534
+ moduleResolution: 'bundler',
535
+ importHelpers: true,
536
+ target: 'ES2022',
537
+ module: 'ES2022',
538
+ useDefineForClassFields: false,
539
+ lib: ['ES2022', 'dom'],
540
+ },
541
+ angularCompilerOptions: {
542
+ enableI18nLegacyMessageIdFormat: false,
543
+ strictInjectionParameters: true,
544
+ strictInputAccessModifiers: true,
545
+ strictTemplates: true,
546
+ },
547
+ }, null, 2);
548
+ }
549
+ generateTsConfigApp() {
550
+ return JSON.stringify({
551
+ extends: './tsconfig.json',
552
+ compilerOptions: { outDir: './out-tsc/app', types: [] },
553
+ files: ['src/main.ts'],
554
+ include: ['src/**/*.d.ts'],
555
+ }, null, 2);
556
+ }
557
+ generateAngularJson(name) {
558
+ return JSON.stringify({
559
+ $schema: './node_modules/@angular/cli/lib/config/schema.json',
560
+ version: 1,
561
+ newProjectRoot: 'projects',
562
+ projects: {
563
+ [name]: {
564
+ projectType: 'application',
565
+ root: '',
566
+ sourceRoot: 'src',
567
+ prefix: 'app',
568
+ architect: {
569
+ build: {
570
+ builder: '@angular-devkit/build-angular:application',
571
+ options: {
572
+ outputPath: 'dist',
573
+ index: 'src/index.html',
574
+ browser: 'src/main.ts',
575
+ tsConfig: 'tsconfig.app.json',
576
+ styles: ['src/styles.css'],
577
+ scripts: [],
578
+ },
579
+ },
580
+ serve: {
581
+ builder: '@angular-devkit/build-angular:dev-server',
582
+ configurations: {
583
+ development: { buildTarget: `${name}:build:development` },
584
+ },
585
+ defaultConfiguration: 'development',
586
+ },
587
+ },
588
+ },
589
+ },
590
+ }, null, 2);
591
+ }
592
+ generateIndexHtml(title, options) {
593
+ const extStyles = (options.externalStyles || []).map(href => ` <link rel="stylesheet" href="${href}" />`).join('\n');
594
+ return `<!doctype html>
595
+ <html lang="en">
596
+ <head>
597
+ <meta charset="utf-8" />
598
+ <title>${title}</title>
599
+ <base href="/" />
600
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
601
+ ${extStyles}
602
+ </head>
603
+ <body>
604
+ <app-root></app-root>
605
+ </body>
606
+ </html>
607
+ `;
608
+ }
609
+ generateMain() {
610
+ return `import { bootstrapApplication } from '@angular/platform-browser';
611
+ import { AppComponent } from './app/app.component';
612
+
613
+ bootstrapApplication(AppComponent).catch((err) => console.error(err));
614
+ `;
615
+ }
616
+ }
617
+ //# sourceMappingURL=angular-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-adapter.js","sourceRoot":"","sources":["../../src/frameworks/angular-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Framework adapter registry.
3
+ *
4
+ * Resolves a FrameworkTarget string to the corresponding adapter instance.
5
+ */
6
+ import type { FrameworkAdapter, FrameworkTarget } from './types.js';
7
+ export type { FrameworkAdapter, FrameworkTarget } from './types.js';
8
+ export declare function getFrameworkAdapter(target: FrameworkTarget): FrameworkAdapter;
9
+ export declare const SUPPORTED_FRAMEWORKS: FrameworkTarget[];
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/frameworks/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAOpE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAUpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,gBAAgB,CAM7E;AAED,eAAO,MAAM,oBAAoB,EAAE,eAAe,EAAoD,CAAC"}