@tachui/cli 0.8.0-alpha → 0.8.5-alpha

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 (638) hide show
  1. package/README.md +15 -0
  2. package/bin/tacho.js +57 -7
  3. package/dist/cli/src/commands/analyze-imports.d.ts +18 -0
  4. package/dist/cli/src/commands/analyze-imports.d.ts.map +1 -0
  5. package/dist/cli/src/commands/analyze-imports.js +152 -0
  6. package/dist/cli/src/commands/analyze-imports.js.map +1 -0
  7. package/dist/cli/src/commands/analyze.d.ts.map +1 -0
  8. package/dist/{commands → cli/src/commands}/analyze.js +226 -13
  9. package/dist/cli/src/commands/analyze.js.map +1 -0
  10. package/dist/cli/src/commands/dev.d.ts.map +1 -0
  11. package/dist/cli/src/commands/dev.js.map +1 -0
  12. package/dist/cli/src/commands/generate.d.ts.map +1 -0
  13. package/dist/{commands → cli/src/commands}/generate.js +0 -21
  14. package/dist/cli/src/commands/generate.js.map +1 -0
  15. package/dist/cli/src/commands/init.d.ts.map +1 -0
  16. package/dist/{commands → cli/src/commands}/init.js +1 -28
  17. package/dist/cli/src/commands/init.js.map +1 -0
  18. package/dist/cli/src/commands/migrate/remove-modifier-trigger.d.ts +3 -0
  19. package/dist/cli/src/commands/migrate/remove-modifier-trigger.d.ts.map +1 -0
  20. package/dist/cli/src/commands/migrate/remove-modifier-trigger.js +103 -0
  21. package/dist/cli/src/commands/migrate/remove-modifier-trigger.js.map +1 -0
  22. package/dist/cli/src/commands/migrate.d.ts.map +1 -0
  23. package/dist/{commands → cli/src/commands}/migrate.js +5 -3
  24. package/dist/cli/src/commands/migrate.js.map +1 -0
  25. package/dist/cli/src/commands/modifier-docs.d.ts +24 -0
  26. package/dist/cli/src/commands/modifier-docs.d.ts.map +1 -0
  27. package/dist/cli/src/commands/modifier-docs.js +375 -0
  28. package/dist/cli/src/commands/modifier-docs.js.map +1 -0
  29. package/dist/cli/src/commands/optimize.d.ts.map +1 -0
  30. package/dist/cli/src/commands/optimize.js.map +1 -0
  31. package/dist/cli/src/import-optimizer.d.ts +50 -0
  32. package/dist/cli/src/import-optimizer.d.ts.map +1 -0
  33. package/dist/cli/src/import-optimizer.js +227 -0
  34. package/dist/cli/src/import-optimizer.js.map +1 -0
  35. package/dist/cli/src/index.d.ts.map +1 -0
  36. package/dist/{index.js → cli/src/index.js} +14 -3
  37. package/dist/cli/src/index.js.map +1 -0
  38. package/dist/cli/src/migrations/remove-modifier-trigger.d.ts +7 -0
  39. package/dist/cli/src/migrations/remove-modifier-trigger.d.ts.map +1 -0
  40. package/dist/cli/src/migrations/remove-modifier-trigger.js +99 -0
  41. package/dist/cli/src/migrations/remove-modifier-trigger.js.map +1 -0
  42. package/dist/core/package.json +223 -0
  43. package/dist/core/src/assets/Asset.d.ts +11 -0
  44. package/dist/core/src/assets/Asset.d.ts.map +1 -0
  45. package/dist/core/src/assets/Asset.js +12 -0
  46. package/dist/core/src/assets/Asset.js.map +1 -0
  47. package/dist/core/src/assets/AssetCollection.d.ts +14 -0
  48. package/dist/core/src/assets/AssetCollection.d.ts.map +1 -0
  49. package/dist/core/src/assets/AssetCollection.js +133 -0
  50. package/dist/core/src/assets/AssetCollection.js.map +1 -0
  51. package/dist/core/src/assets/ColorAsset.d.ts +31 -0
  52. package/dist/core/src/assets/ColorAsset.d.ts.map +1 -0
  53. package/dist/core/src/assets/ColorAsset.js +182 -0
  54. package/dist/core/src/assets/ColorAsset.js.map +1 -0
  55. package/dist/core/src/assets/FontAsset.d.ts +114 -0
  56. package/dist/core/src/assets/FontAsset.d.ts.map +1 -0
  57. package/dist/core/src/assets/FontAsset.js +289 -0
  58. package/dist/core/src/assets/FontAsset.js.map +1 -0
  59. package/dist/core/src/assets/ImageAsset.d.ts +35 -0
  60. package/dist/core/src/assets/ImageAsset.d.ts.map +1 -0
  61. package/dist/core/src/assets/ImageAsset.js +69 -0
  62. package/dist/core/src/assets/ImageAsset.js.map +1 -0
  63. package/dist/core/src/assets/index.d.ts +27 -0
  64. package/dist/core/src/assets/index.d.ts.map +1 -0
  65. package/dist/core/src/assets/index.js +137 -0
  66. package/dist/core/src/assets/index.js.map +1 -0
  67. package/dist/core/src/assets/types.d.ts +10 -0
  68. package/dist/core/src/assets/types.d.ts.map +1 -0
  69. package/dist/core/src/assets/types.js +6 -0
  70. package/dist/core/src/assets/types.js.map +1 -0
  71. package/dist/core/src/compiler/advanced-parser.d.ts +113 -0
  72. package/dist/core/src/compiler/advanced-parser.d.ts.map +1 -0
  73. package/dist/core/src/compiler/advanced-parser.js +702 -0
  74. package/dist/core/src/compiler/advanced-parser.js.map +1 -0
  75. package/dist/core/src/compiler/codegen.d.ts +20 -0
  76. package/dist/core/src/compiler/codegen.d.ts.map +1 -0
  77. package/dist/core/src/compiler/codegen.js +509 -0
  78. package/dist/core/src/compiler/codegen.js.map +1 -0
  79. package/dist/core/src/compiler/enhanced-codegen.d.ts +121 -0
  80. package/dist/core/src/compiler/enhanced-codegen.d.ts.map +1 -0
  81. package/dist/core/src/compiler/enhanced-codegen.js +607 -0
  82. package/dist/core/src/compiler/enhanced-codegen.js.map +1 -0
  83. package/dist/core/src/compiler/index.d.ts +14 -0
  84. package/dist/core/src/compiler/index.d.ts.map +1 -0
  85. package/dist/core/src/compiler/index.js +12 -0
  86. package/dist/core/src/compiler/index.js.map +1 -0
  87. package/dist/core/src/compiler/parser.d.ts +12 -0
  88. package/dist/core/src/compiler/parser.d.ts.map +1 -0
  89. package/dist/core/src/compiler/parser.js +407 -0
  90. package/dist/core/src/compiler/parser.js.map +1 -0
  91. package/dist/core/src/compiler/plugin.d.ts +13 -0
  92. package/dist/core/src/compiler/plugin.d.ts.map +1 -0
  93. package/dist/core/src/compiler/plugin.js +456 -0
  94. package/dist/core/src/compiler/plugin.js.map +1 -0
  95. package/dist/core/src/compiler/types.d.ts +177 -0
  96. package/dist/core/src/compiler/types.d.ts.map +1 -0
  97. package/dist/core/src/compiler/types.js +5 -0
  98. package/dist/core/src/compiler/types.js.map +1 -0
  99. package/dist/core/src/components/factory.d.ts +24 -0
  100. package/dist/core/src/components/factory.d.ts.map +1 -0
  101. package/dist/core/src/components/factory.js +19 -0
  102. package/dist/core/src/components/factory.js.map +1 -0
  103. package/dist/core/src/components/index.d.ts +12 -0
  104. package/dist/core/src/components/index.d.ts.map +1 -0
  105. package/dist/core/src/components/index.js +9 -0
  106. package/dist/core/src/components/index.js.map +1 -0
  107. package/dist/core/src/components/wrapper.d.ts +142 -0
  108. package/dist/core/src/components/wrapper.d.ts.map +1 -0
  109. package/dist/core/src/components/wrapper.js +628 -0
  110. package/dist/core/src/components/wrapper.js.map +1 -0
  111. package/dist/core/src/concatenation/concatenatable.d.ts +63 -0
  112. package/dist/core/src/concatenation/concatenatable.d.ts.map +1 -0
  113. package/dist/core/src/concatenation/concatenatable.js +158 -0
  114. package/dist/core/src/concatenation/concatenatable.js.map +1 -0
  115. package/dist/core/src/concatenation/concatenated-component.d.ts +124 -0
  116. package/dist/core/src/concatenation/concatenated-component.d.ts.map +1 -0
  117. package/dist/core/src/concatenation/concatenated-component.js +447 -0
  118. package/dist/core/src/concatenation/concatenated-component.js.map +1 -0
  119. package/dist/core/src/concatenation/index.d.ts +13 -0
  120. package/dist/core/src/concatenation/index.d.ts.map +1 -0
  121. package/dist/core/src/concatenation/index.js +16 -0
  122. package/dist/core/src/concatenation/index.js.map +1 -0
  123. package/dist/core/src/concatenation/text-optimizer.d.ts +104 -0
  124. package/dist/core/src/concatenation/text-optimizer.d.ts.map +1 -0
  125. package/dist/core/src/concatenation/text-optimizer.js +349 -0
  126. package/dist/core/src/concatenation/text-optimizer.js.map +1 -0
  127. package/dist/core/src/concatenation/types.d.ts +88 -0
  128. package/dist/core/src/concatenation/types.d.ts.map +1 -0
  129. package/dist/core/src/concatenation/types.js +23 -0
  130. package/dist/core/src/concatenation/types.js.map +1 -0
  131. package/dist/core/src/config.d.ts +7 -0
  132. package/dist/core/src/config.d.ts.map +1 -0
  133. package/dist/core/src/config.js +17 -0
  134. package/dist/core/src/config.js.map +1 -0
  135. package/dist/core/src/constants/frame-utils.d.ts +68 -0
  136. package/dist/core/src/constants/frame-utils.d.ts.map +1 -0
  137. package/dist/core/src/constants/frame-utils.js +156 -0
  138. package/dist/core/src/constants/frame-utils.js.map +1 -0
  139. package/dist/core/src/constants/index.d.ts +8 -0
  140. package/dist/core/src/constants/index.d.ts.map +1 -0
  141. package/dist/core/src/constants/index.js +8 -0
  142. package/dist/core/src/constants/index.js.map +1 -0
  143. package/dist/core/src/constants/layout.d.ts +96 -0
  144. package/dist/core/src/constants/layout.d.ts.map +1 -0
  145. package/dist/core/src/constants/layout.js +124 -0
  146. package/dist/core/src/constants/layout.js.map +1 -0
  147. package/dist/core/src/css-classes/component-base.d.ts +40 -0
  148. package/dist/core/src/css-classes/component-base.d.ts.map +1 -0
  149. package/dist/core/src/css-classes/component-base.js +90 -0
  150. package/dist/core/src/css-classes/component-base.js.map +1 -0
  151. package/dist/core/src/css-classes/css-class-manager.d.ts +89 -0
  152. package/dist/core/src/css-classes/css-class-manager.d.ts.map +1 -0
  153. package/dist/core/src/css-classes/css-class-manager.js +328 -0
  154. package/dist/core/src/css-classes/css-class-manager.js.map +1 -0
  155. package/dist/core/src/css-classes/dom-integration.d.ts +76 -0
  156. package/dist/core/src/css-classes/dom-integration.d.ts.map +1 -0
  157. package/dist/core/src/css-classes/dom-integration.js +104 -0
  158. package/dist/core/src/css-classes/dom-integration.js.map +1 -0
  159. package/dist/core/src/css-classes/enhanced-renderer.d.ts +42 -0
  160. package/dist/core/src/css-classes/enhanced-renderer.d.ts.map +1 -0
  161. package/dist/core/src/css-classes/enhanced-renderer.js +121 -0
  162. package/dist/core/src/css-classes/enhanced-renderer.js.map +1 -0
  163. package/dist/core/src/css-classes/index.d.ts +14 -0
  164. package/dist/core/src/css-classes/index.d.ts.map +1 -0
  165. package/dist/core/src/css-classes/index.js +14 -0
  166. package/dist/core/src/css-classes/index.js.map +1 -0
  167. package/dist/core/src/css-classes/types.d.ts +59 -0
  168. package/dist/core/src/css-classes/types.d.ts.map +1 -0
  169. package/dist/core/src/css-classes/types.js +8 -0
  170. package/dist/core/src/css-classes/types.js.map +1 -0
  171. package/dist/core/src/css-classes/utilities.d.ts +104 -0
  172. package/dist/core/src/css-classes/utilities.d.ts.map +1 -0
  173. package/dist/core/src/css-classes/utilities.js +126 -0
  174. package/dist/core/src/css-classes/utilities.js.map +1 -0
  175. package/dist/core/src/gradients/css-generator.d.ts +10 -0
  176. package/dist/core/src/gradients/css-generator.d.ts.map +1 -0
  177. package/dist/core/src/gradients/css-generator.js +123 -0
  178. package/dist/core/src/gradients/css-generator.js.map +1 -0
  179. package/dist/core/src/gradients/examples.d.ts +432 -0
  180. package/dist/core/src/gradients/examples.d.ts.map +1 -0
  181. package/dist/core/src/gradients/examples.js +588 -0
  182. package/dist/core/src/gradients/examples.js.map +1 -0
  183. package/dist/core/src/gradients/gradient-asset.d.ts +10 -0
  184. package/dist/core/src/gradients/gradient-asset.d.ts.map +1 -0
  185. package/dist/core/src/gradients/gradient-asset.js +25 -0
  186. package/dist/core/src/gradients/gradient-asset.js.map +1 -0
  187. package/dist/core/src/gradients/index.d.ts +19 -0
  188. package/dist/core/src/gradients/index.d.ts.map +1 -0
  189. package/dist/core/src/gradients/index.js +56 -0
  190. package/dist/core/src/gradients/index.js.map +1 -0
  191. package/dist/core/src/gradients/performance.d.ts +146 -0
  192. package/dist/core/src/gradients/performance.d.ts.map +1 -0
  193. package/dist/core/src/gradients/performance.js +413 -0
  194. package/dist/core/src/gradients/performance.js.map +1 -0
  195. package/dist/core/src/gradients/presets.d.ts +165 -0
  196. package/dist/core/src/gradients/presets.d.ts.map +1 -0
  197. package/dist/core/src/gradients/presets.js +371 -0
  198. package/dist/core/src/gradients/presets.js.map +1 -0
  199. package/dist/core/src/gradients/reactive.d.ts +167 -0
  200. package/dist/core/src/gradients/reactive.d.ts.map +1 -0
  201. package/dist/core/src/gradients/reactive.js +329 -0
  202. package/dist/core/src/gradients/reactive.js.map +1 -0
  203. package/dist/core/src/gradients/state-gradient-asset.d.ts +67 -0
  204. package/dist/core/src/gradients/state-gradient-asset.d.ts.map +1 -0
  205. package/dist/core/src/gradients/state-gradient-asset.js +145 -0
  206. package/dist/core/src/gradients/state-gradient-asset.js.map +1 -0
  207. package/dist/core/src/gradients/types.d.ts +6 -0
  208. package/dist/core/src/gradients/types.d.ts.map +1 -0
  209. package/dist/core/src/gradients/types.js +6 -0
  210. package/dist/core/src/gradients/types.js.map +1 -0
  211. package/dist/core/src/gradients/utils.d.ts +313 -0
  212. package/dist/core/src/gradients/utils.d.ts.map +1 -0
  213. package/dist/core/src/gradients/utils.js +513 -0
  214. package/dist/core/src/gradients/utils.js.map +1 -0
  215. package/dist/core/src/gradients/validation.d.ts +156 -0
  216. package/dist/core/src/gradients/validation.d.ts.map +1 -0
  217. package/dist/core/src/gradients/validation.js +392 -0
  218. package/dist/core/src/gradients/validation.js.map +1 -0
  219. package/dist/core/src/index.d.ts +33 -0
  220. package/dist/core/src/index.d.ts.map +1 -0
  221. package/dist/core/src/index.js +57 -0
  222. package/dist/core/src/index.js.map +1 -0
  223. package/dist/core/src/lifecycle/hooks.d.ts +101 -0
  224. package/dist/core/src/lifecycle/hooks.d.ts.map +1 -0
  225. package/dist/core/src/lifecycle/hooks.js +241 -0
  226. package/dist/core/src/lifecycle/hooks.js.map +1 -0
  227. package/dist/core/src/modifiers/alignment.d.ts +5 -0
  228. package/dist/core/src/modifiers/alignment.d.ts.map +1 -0
  229. package/dist/core/src/modifiers/alignment.js +19 -0
  230. package/dist/core/src/modifiers/alignment.js.map +1 -0
  231. package/dist/core/src/modifiers/base.d.ts +128 -0
  232. package/dist/core/src/modifiers/base.d.ts.map +1 -0
  233. package/dist/core/src/modifiers/base.js +1062 -0
  234. package/dist/core/src/modifiers/base.js.map +1 -0
  235. package/dist/core/src/modifiers/builder.d.ts +148 -0
  236. package/dist/core/src/modifiers/builder.d.ts.map +1 -0
  237. package/dist/core/src/modifiers/builder.js +903 -0
  238. package/dist/core/src/modifiers/builder.js.map +1 -0
  239. package/dist/core/src/modifiers/core.d.ts +14 -0
  240. package/dist/core/src/modifiers/core.d.ts.map +1 -0
  241. package/dist/core/src/modifiers/core.js +16 -0
  242. package/dist/core/src/modifiers/core.js.map +1 -0
  243. package/dist/core/src/modifiers/corner-radius.d.ts +8 -0
  244. package/dist/core/src/modifiers/corner-radius.d.ts.map +1 -0
  245. package/dist/core/src/modifiers/corner-radius.js +19 -0
  246. package/dist/core/src/modifiers/corner-radius.js.map +1 -0
  247. package/dist/core/src/modifiers/factories.d.ts +88 -0
  248. package/dist/core/src/modifiers/factories.d.ts.map +1 -0
  249. package/dist/core/src/modifiers/factories.js +376 -0
  250. package/dist/core/src/modifiers/factories.js.map +1 -0
  251. package/dist/core/src/modifiers/index.d.ts +17 -0
  252. package/dist/core/src/modifiers/index.d.ts.map +1 -0
  253. package/dist/core/src/modifiers/index.js +16 -0
  254. package/dist/core/src/modifiers/index.js.map +1 -0
  255. package/dist/core/src/modifiers/layout-priority.d.ts +8 -0
  256. package/dist/core/src/modifiers/layout-priority.d.ts.map +1 -0
  257. package/dist/core/src/modifiers/layout-priority.js +19 -0
  258. package/dist/core/src/modifiers/layout-priority.js.map +1 -0
  259. package/dist/core/src/modifiers/opacity.d.ts +8 -0
  260. package/dist/core/src/modifiers/opacity.d.ts.map +1 -0
  261. package/dist/core/src/modifiers/opacity.js +19 -0
  262. package/dist/core/src/modifiers/opacity.js.map +1 -0
  263. package/dist/core/src/modifiers/presets.d.ts +368 -0
  264. package/dist/core/src/modifiers/presets.d.ts.map +1 -0
  265. package/dist/core/src/modifiers/presets.js +394 -0
  266. package/dist/core/src/modifiers/presets.js.map +1 -0
  267. package/dist/core/src/modifiers/proxy.d.ts +4 -0
  268. package/dist/core/src/modifiers/proxy.d.ts.map +1 -0
  269. package/dist/core/src/modifiers/proxy.js +212 -0
  270. package/dist/core/src/modifiers/proxy.js.map +1 -0
  271. package/dist/core/src/modifiers/registration-utils.d.ts +7 -0
  272. package/dist/core/src/modifiers/registration-utils.d.ts.map +1 -0
  273. package/dist/core/src/modifiers/registration-utils.js +46 -0
  274. package/dist/core/src/modifiers/registration-utils.js.map +1 -0
  275. package/dist/core/src/modifiers/registry.d.ts +78 -0
  276. package/dist/core/src/modifiers/registry.d.ts.map +1 -0
  277. package/dist/core/src/modifiers/registry.js +397 -0
  278. package/dist/core/src/modifiers/registry.js.map +1 -0
  279. package/dist/core/src/modifiers/types.d.ts +6 -0
  280. package/dist/core/src/modifiers/types.d.ts.map +1 -0
  281. package/dist/core/src/modifiers/types.js +6 -0
  282. package/dist/core/src/modifiers/types.js.map +1 -0
  283. package/dist/core/src/plugins/index.d.ts +16 -0
  284. package/dist/core/src/plugins/index.d.ts.map +1 -0
  285. package/dist/core/src/plugins/index.js +21 -0
  286. package/dist/core/src/plugins/index.js.map +1 -0
  287. package/dist/core/src/plugins/legacy-adapter.d.ts +35 -0
  288. package/dist/core/src/plugins/legacy-adapter.d.ts.map +1 -0
  289. package/dist/core/src/plugins/legacy-adapter.js +57 -0
  290. package/dist/core/src/plugins/legacy-adapter.js.map +1 -0
  291. package/dist/core/src/plugins/simplified-component-registry.d.ts +40 -0
  292. package/dist/core/src/plugins/simplified-component-registry.d.ts.map +1 -0
  293. package/dist/core/src/plugins/simplified-component-registry.js +97 -0
  294. package/dist/core/src/plugins/simplified-component-registry.js.map +1 -0
  295. package/dist/core/src/plugins/simplified-lazy-loader.d.ts +65 -0
  296. package/dist/core/src/plugins/simplified-lazy-loader.d.ts.map +1 -0
  297. package/dist/core/src/plugins/simplified-lazy-loader.js +205 -0
  298. package/dist/core/src/plugins/simplified-lazy-loader.js.map +1 -0
  299. package/dist/core/src/plugins/simplified-plugin-manager.d.ts +24 -0
  300. package/dist/core/src/plugins/simplified-plugin-manager.d.ts.map +1 -0
  301. package/dist/core/src/plugins/simplified-plugin-manager.js +77 -0
  302. package/dist/core/src/plugins/simplified-plugin-manager.js.map +1 -0
  303. package/dist/core/src/plugins/simplified-tachui-instance.d.ts +54 -0
  304. package/dist/core/src/plugins/simplified-tachui-instance.d.ts.map +1 -0
  305. package/dist/core/src/plugins/simplified-tachui-instance.js +114 -0
  306. package/dist/core/src/plugins/simplified-tachui-instance.js.map +1 -0
  307. package/dist/core/src/plugins/simplified-types.d.ts +63 -0
  308. package/dist/core/src/plugins/simplified-types.d.ts.map +1 -0
  309. package/dist/core/src/plugins/simplified-types.js +18 -0
  310. package/dist/core/src/plugins/simplified-types.js.map +1 -0
  311. package/dist/core/src/plugins/simplified-utils.d.ts +39 -0
  312. package/dist/core/src/plugins/simplified-utils.d.ts.map +1 -0
  313. package/dist/core/src/plugins/simplified-utils.js +104 -0
  314. package/dist/core/src/plugins/simplified-utils.js.map +1 -0
  315. package/dist/core/src/reactive/cleanup.d.ts +115 -0
  316. package/dist/core/src/reactive/cleanup.d.ts.map +1 -0
  317. package/dist/core/src/reactive/cleanup.js +187 -0
  318. package/dist/core/src/reactive/cleanup.js.map +1 -0
  319. package/dist/core/src/reactive/computed.d.ts +115 -0
  320. package/dist/core/src/reactive/computed.d.ts.map +1 -0
  321. package/dist/core/src/reactive/computed.js +237 -0
  322. package/dist/core/src/reactive/computed.js.map +1 -0
  323. package/dist/core/src/reactive/context.d.ts +83 -0
  324. package/dist/core/src/reactive/context.d.ts.map +1 -0
  325. package/dist/core/src/reactive/context.js +286 -0
  326. package/dist/core/src/reactive/context.js.map +1 -0
  327. package/dist/core/src/reactive/effect.d.ts +79 -0
  328. package/dist/core/src/reactive/effect.d.ts.map +1 -0
  329. package/dist/core/src/reactive/effect.js +159 -0
  330. package/dist/core/src/reactive/effect.js.map +1 -0
  331. package/dist/core/src/reactive/enhanced-effect.d.ts +108 -0
  332. package/dist/core/src/reactive/enhanced-effect.d.ts.map +1 -0
  333. package/dist/core/src/reactive/enhanced-effect.js +265 -0
  334. package/dist/core/src/reactive/enhanced-effect.js.map +1 -0
  335. package/dist/core/src/reactive/enhanced-signal.d.ts +91 -0
  336. package/dist/core/src/reactive/enhanced-signal.d.ts.map +1 -0
  337. package/dist/core/src/reactive/enhanced-signal.js +175 -0
  338. package/dist/core/src/reactive/enhanced-signal.js.map +1 -0
  339. package/dist/core/src/reactive/equality.d.ts +51 -0
  340. package/dist/core/src/reactive/equality.d.ts.map +1 -0
  341. package/dist/core/src/reactive/equality.js +169 -0
  342. package/dist/core/src/reactive/equality.js.map +1 -0
  343. package/dist/core/src/reactive/index.d.ts +22 -0
  344. package/dist/core/src/reactive/index.d.ts.map +1 -0
  345. package/dist/core/src/reactive/index.js +33 -0
  346. package/dist/core/src/reactive/index.js.map +1 -0
  347. package/dist/core/src/reactive/migration.d.ts +104 -0
  348. package/dist/core/src/reactive/migration.d.ts.map +1 -0
  349. package/dist/core/src/reactive/migration.js +257 -0
  350. package/dist/core/src/reactive/migration.js.map +1 -0
  351. package/dist/core/src/reactive/ownership.d.ts +75 -0
  352. package/dist/core/src/reactive/ownership.d.ts.map +1 -0
  353. package/dist/core/src/reactive/ownership.js +155 -0
  354. package/dist/core/src/reactive/ownership.js.map +1 -0
  355. package/dist/core/src/reactive/scheduler.d.ts +56 -0
  356. package/dist/core/src/reactive/scheduler.d.ts.map +1 -0
  357. package/dist/core/src/reactive/scheduler.js +263 -0
  358. package/dist/core/src/reactive/scheduler.js.map +1 -0
  359. package/dist/core/src/reactive/signal-list.d.ts +100 -0
  360. package/dist/core/src/reactive/signal-list.d.ts.map +1 -0
  361. package/dist/core/src/reactive/signal-list.js +240 -0
  362. package/dist/core/src/reactive/signal-list.js.map +1 -0
  363. package/dist/core/src/reactive/signal.d.ts +82 -0
  364. package/dist/core/src/reactive/signal.d.ts.map +1 -0
  365. package/dist/core/src/reactive/signal.js +172 -0
  366. package/dist/core/src/reactive/signal.js.map +1 -0
  367. package/dist/core/src/reactive/theme.d.ts +12 -0
  368. package/dist/core/src/reactive/theme.d.ts.map +1 -0
  369. package/dist/core/src/reactive/theme.js +41 -0
  370. package/dist/core/src/reactive/theme.js.map +1 -0
  371. package/dist/core/src/reactive/types.d.ts +6 -0
  372. package/dist/core/src/reactive/types.d.ts.map +1 -0
  373. package/dist/core/src/reactive/types.js +6 -0
  374. package/dist/core/src/reactive/types.js.map +1 -0
  375. package/dist/core/src/reactive/unified-scheduler.d.ts +112 -0
  376. package/dist/core/src/reactive/unified-scheduler.d.ts.map +1 -0
  377. package/dist/core/src/reactive/unified-scheduler.js +315 -0
  378. package/dist/core/src/reactive/unified-scheduler.js.map +1 -0
  379. package/dist/core/src/runtime/component-context.d.ts +73 -0
  380. package/dist/core/src/runtime/component-context.d.ts.map +1 -0
  381. package/dist/core/src/runtime/component-context.js +278 -0
  382. package/dist/core/src/runtime/component-context.js.map +1 -0
  383. package/dist/core/src/runtime/component.d.ts +112 -0
  384. package/dist/core/src/runtime/component.d.ts.map +1 -0
  385. package/dist/core/src/runtime/component.js +394 -0
  386. package/dist/core/src/runtime/component.js.map +1 -0
  387. package/dist/core/src/runtime/context.d.ts +138 -0
  388. package/dist/core/src/runtime/context.d.ts.map +1 -0
  389. package/dist/core/src/runtime/context.js +411 -0
  390. package/dist/core/src/runtime/context.js.map +1 -0
  391. package/dist/core/src/runtime/dom-bridge.d.ts +70 -0
  392. package/dist/core/src/runtime/dom-bridge.d.ts.map +1 -0
  393. package/dist/core/src/runtime/dom-bridge.js +481 -0
  394. package/dist/core/src/runtime/dom-bridge.js.map +1 -0
  395. package/dist/core/src/runtime/element-override.d.ts +82 -0
  396. package/dist/core/src/runtime/element-override.d.ts.map +1 -0
  397. package/dist/core/src/runtime/element-override.js +360 -0
  398. package/dist/core/src/runtime/element-override.js.map +1 -0
  399. package/dist/core/src/runtime/event-delegation.d.ts +59 -0
  400. package/dist/core/src/runtime/event-delegation.d.ts.map +1 -0
  401. package/dist/core/src/runtime/event-delegation.js +220 -0
  402. package/dist/core/src/runtime/event-delegation.js.map +1 -0
  403. package/dist/core/src/runtime/index.d.ts +24 -0
  404. package/dist/core/src/runtime/index.d.ts.map +1 -0
  405. package/dist/core/src/runtime/index.js +36 -0
  406. package/dist/core/src/runtime/index.js.map +1 -0
  407. package/dist/core/src/runtime/lazy-component.d.ts +58 -0
  408. package/dist/core/src/runtime/lazy-component.d.ts.map +1 -0
  409. package/dist/core/src/runtime/lazy-component.js +206 -0
  410. package/dist/core/src/runtime/lazy-component.js.map +1 -0
  411. package/dist/core/src/runtime/lifecycle.d.ts +8 -0
  412. package/dist/core/src/runtime/lifecycle.d.ts.map +1 -0
  413. package/dist/core/src/runtime/lifecycle.js +9 -0
  414. package/dist/core/src/runtime/lifecycle.js.map +1 -0
  415. package/dist/core/src/runtime/mounting.d.ts +9 -0
  416. package/dist/core/src/runtime/mounting.d.ts.map +1 -0
  417. package/dist/core/src/runtime/mounting.js +15 -0
  418. package/dist/core/src/runtime/mounting.js.map +1 -0
  419. package/dist/core/src/runtime/optimization.d.ts +8 -0
  420. package/dist/core/src/runtime/optimization.d.ts.map +1 -0
  421. package/dist/core/src/runtime/optimization.js +12 -0
  422. package/dist/core/src/runtime/optimization.js.map +1 -0
  423. package/dist/core/src/runtime/props.d.ts +154 -0
  424. package/dist/core/src/runtime/props.d.ts.map +1 -0
  425. package/dist/core/src/runtime/props.js +389 -0
  426. package/dist/core/src/runtime/props.js.map +1 -0
  427. package/dist/core/src/runtime/renderer.d.ts +168 -0
  428. package/dist/core/src/runtime/renderer.d.ts.map +1 -0
  429. package/dist/core/src/runtime/renderer.js +1181 -0
  430. package/dist/core/src/runtime/renderer.js.map +1 -0
  431. package/dist/core/src/runtime/semantic-role-manager.d.ts +37 -0
  432. package/dist/core/src/runtime/semantic-role-manager.d.ts.map +1 -0
  433. package/dist/core/src/runtime/semantic-role-manager.js +102 -0
  434. package/dist/core/src/runtime/semantic-role-manager.js.map +1 -0
  435. package/dist/core/src/runtime/types.d.ts +6 -0
  436. package/dist/core/src/runtime/types.d.ts.map +1 -0
  437. package/dist/core/src/runtime/types.js +6 -0
  438. package/dist/core/src/runtime/types.js.map +1 -0
  439. package/dist/core/src/state/binding.d.ts +96 -0
  440. package/dist/core/src/state/binding.d.ts.map +1 -0
  441. package/dist/core/src/state/binding.js +264 -0
  442. package/dist/core/src/state/binding.js.map +1 -0
  443. package/dist/core/src/state/environment.d.ts +178 -0
  444. package/dist/core/src/state/environment.d.ts.map +1 -0
  445. package/dist/core/src/state/environment.js +272 -0
  446. package/dist/core/src/state/environment.js.map +1 -0
  447. package/dist/core/src/state/index.d.ts +108 -0
  448. package/dist/core/src/state/index.d.ts.map +1 -0
  449. package/dist/core/src/state/index.js +102 -0
  450. package/dist/core/src/state/index.js.map +1 -0
  451. package/dist/core/src/state/observed-object.d.ts +126 -0
  452. package/dist/core/src/state/observed-object.d.ts.map +1 -0
  453. package/dist/core/src/state/observed-object.js +330 -0
  454. package/dist/core/src/state/observed-object.js.map +1 -0
  455. package/dist/core/src/state/state-manager.d.ts +97 -0
  456. package/dist/core/src/state/state-manager.d.ts.map +1 -0
  457. package/dist/core/src/state/state-manager.js +297 -0
  458. package/dist/core/src/state/state-manager.js.map +1 -0
  459. package/dist/core/src/state/state.d.ts +78 -0
  460. package/dist/core/src/state/state.d.ts.map +1 -0
  461. package/dist/core/src/state/state.js +283 -0
  462. package/dist/core/src/state/state.js.map +1 -0
  463. package/dist/core/src/state/types.d.ts +159 -0
  464. package/dist/core/src/state/types.d.ts.map +1 -0
  465. package/dist/core/src/state/types.js +8 -0
  466. package/dist/core/src/state/types.js.map +1 -0
  467. package/dist/core/src/utils/clone-helpers.d.ts +11 -0
  468. package/dist/core/src/utils/clone-helpers.d.ts.map +1 -0
  469. package/dist/core/src/utils/clone-helpers.js +69 -0
  470. package/dist/core/src/utils/clone-helpers.js.map +1 -0
  471. package/dist/core/src/validation/build-time-stub.d.ts +33 -0
  472. package/dist/core/src/validation/build-time-stub.d.ts.map +1 -0
  473. package/dist/core/src/validation/build-time-stub.js +53 -0
  474. package/dist/core/src/validation/build-time-stub.js.map +1 -0
  475. package/dist/core/src/validation/debug-tools-stub.d.ts +67 -0
  476. package/dist/core/src/validation/debug-tools-stub.d.ts.map +1 -0
  477. package/dist/core/src/validation/debug-tools-stub.js +94 -0
  478. package/dist/core/src/validation/debug-tools-stub.js.map +1 -0
  479. package/dist/core/src/validation/index.d.ts +116 -0
  480. package/dist/core/src/validation/index.d.ts.map +1 -0
  481. package/dist/core/src/validation/index.js +306 -0
  482. package/dist/core/src/validation/index.js.map +1 -0
  483. package/dist/core/src/validation/lifecycle-validation.d.ts +165 -0
  484. package/dist/core/src/validation/lifecycle-validation.d.ts.map +1 -0
  485. package/dist/core/src/validation/lifecycle-validation.js +501 -0
  486. package/dist/core/src/validation/lifecycle-validation.js.map +1 -0
  487. package/dist/core/src/validation/performance-optimizer-stub.d.ts +50 -0
  488. package/dist/core/src/validation/performance-optimizer-stub.d.ts.map +1 -0
  489. package/dist/core/src/validation/performance-optimizer-stub.js +50 -0
  490. package/dist/core/src/validation/performance-optimizer-stub.js.map +1 -0
  491. package/dist/core/src/validation/plugin-registration.d.ts +92 -0
  492. package/dist/core/src/validation/plugin-registration.d.ts.map +1 -0
  493. package/dist/core/src/validation/plugin-registration.js +199 -0
  494. package/dist/core/src/validation/plugin-registration.js.map +1 -0
  495. package/dist/core/src/validation/production-bypass-core.d.ts +69 -0
  496. package/dist/core/src/validation/production-bypass-core.d.ts.map +1 -0
  497. package/dist/core/src/validation/production-bypass-core.js +115 -0
  498. package/dist/core/src/validation/production-bypass-core.js.map +1 -0
  499. package/dist/core/src/version.d.ts +19 -0
  500. package/dist/core/src/version.d.ts.map +1 -0
  501. package/dist/core/src/version.js +20 -0
  502. package/dist/core/src/version.js.map +1 -0
  503. package/dist/devtools/src/build-time/detection.d.ts +32 -0
  504. package/dist/devtools/src/build-time/detection.d.ts.map +1 -0
  505. package/dist/devtools/src/build-time/detection.js +327 -0
  506. package/dist/devtools/src/build-time/detection.js.map +1 -0
  507. package/dist/devtools/src/build-time/index.d.ts +84 -0
  508. package/dist/devtools/src/build-time/index.d.ts.map +1 -0
  509. package/dist/devtools/src/build-time/index.js +157 -0
  510. package/dist/devtools/src/build-time/index.js.map +1 -0
  511. package/dist/devtools/src/build-time/plugins.d.ts +75 -0
  512. package/dist/devtools/src/build-time/plugins.d.ts.map +1 -0
  513. package/dist/devtools/src/build-time/plugins.js +429 -0
  514. package/dist/devtools/src/build-time/plugins.js.map +1 -0
  515. package/dist/devtools/src/build-time/rules.d.ts +73 -0
  516. package/dist/devtools/src/build-time/rules.d.ts.map +1 -0
  517. package/dist/devtools/src/build-time/rules.js +622 -0
  518. package/dist/devtools/src/build-time/rules.js.map +1 -0
  519. package/dist/devtools/src/build-time/transformer.d.ts +23 -0
  520. package/dist/devtools/src/build-time/transformer.d.ts.map +1 -0
  521. package/dist/devtools/src/build-time/transformer.js +294 -0
  522. package/dist/devtools/src/build-time/transformer.js.map +1 -0
  523. package/dist/devtools/src/build-time/types.d.ts +212 -0
  524. package/dist/devtools/src/build-time/types.d.ts.map +1 -0
  525. package/dist/devtools/src/build-time/types.js +8 -0
  526. package/dist/devtools/src/build-time/types.js.map +1 -0
  527. package/dist/devtools/src/debug/debug.d.ts +61 -0
  528. package/dist/devtools/src/debug/debug.d.ts.map +1 -0
  529. package/dist/devtools/src/debug/debug.js +239 -0
  530. package/dist/devtools/src/debug/debug.js.map +1 -0
  531. package/dist/devtools/src/debug/development-warnings.d.ts +42 -0
  532. package/dist/devtools/src/debug/development-warnings.d.ts.map +1 -0
  533. package/dist/devtools/src/debug/development-warnings.js +84 -0
  534. package/dist/devtools/src/debug/development-warnings.js.map +1 -0
  535. package/dist/devtools/src/debug/enhanced-errors.d.ts +176 -0
  536. package/dist/devtools/src/debug/enhanced-errors.d.ts.map +1 -0
  537. package/dist/devtools/src/debug/enhanced-errors.js +481 -0
  538. package/dist/devtools/src/debug/enhanced-errors.js.map +1 -0
  539. package/dist/devtools/src/debug/enhanced-types.d.ts +284 -0
  540. package/dist/devtools/src/debug/enhanced-types.d.ts.map +1 -0
  541. package/dist/devtools/src/debug/enhanced-types.js +8 -0
  542. package/dist/devtools/src/debug/enhanced-types.js.map +1 -0
  543. package/dist/devtools/src/debug/index.d.ts +13 -0
  544. package/dist/devtools/src/debug/index.d.ts.map +1 -0
  545. package/dist/devtools/src/debug/index.js +17 -0
  546. package/dist/devtools/src/debug/index.js.map +1 -0
  547. package/dist/devtools/src/debug/validation-debug-tools.d.ts +228 -0
  548. package/dist/devtools/src/debug/validation-debug-tools.d.ts.map +1 -0
  549. package/dist/devtools/src/debug/validation-debug-tools.js +472 -0
  550. package/dist/devtools/src/debug/validation-debug-tools.js.map +1 -0
  551. package/dist/devtools/src/import-guide.d.ts +50 -0
  552. package/dist/devtools/src/import-guide.d.ts.map +1 -0
  553. package/dist/devtools/src/import-guide.js +257 -0
  554. package/dist/devtools/src/import-guide.js.map +1 -0
  555. package/dist/devtools/src/index.d.ts +24 -0
  556. package/dist/devtools/src/index.d.ts.map +1 -0
  557. package/dist/devtools/src/index.js +32 -0
  558. package/dist/devtools/src/index.js.map +1 -0
  559. package/dist/devtools/src/inspector/index.d.ts +232 -0
  560. package/dist/devtools/src/inspector/index.d.ts.map +1 -0
  561. package/dist/devtools/src/inspector/index.js +551 -0
  562. package/dist/devtools/src/inspector/index.js.map +1 -0
  563. package/dist/devtools/src/modifier-parameter-system.d.ts +69 -0
  564. package/dist/devtools/src/modifier-parameter-system.d.ts.map +1 -0
  565. package/dist/devtools/src/modifier-parameter-system.js +462 -0
  566. package/dist/devtools/src/modifier-parameter-system.js.map +1 -0
  567. package/dist/devtools/src/plugins/simplified-error-handler.d.ts +83 -0
  568. package/dist/devtools/src/plugins/simplified-error-handler.d.ts.map +1 -0
  569. package/dist/devtools/src/plugins/simplified-error-handler.js +335 -0
  570. package/dist/devtools/src/plugins/simplified-error-handler.js.map +1 -0
  571. package/dist/devtools/src/profiler/index.d.ts +21 -0
  572. package/dist/devtools/src/profiler/index.d.ts.map +1 -0
  573. package/dist/devtools/src/profiler/index.js +30 -0
  574. package/dist/devtools/src/profiler/index.js.map +1 -0
  575. package/dist/devtools/src/profiler/performance-optimizer.d.ts +115 -0
  576. package/dist/devtools/src/profiler/performance-optimizer.d.ts.map +1 -0
  577. package/dist/devtools/src/profiler/performance-optimizer.js +273 -0
  578. package/dist/devtools/src/profiler/performance-optimizer.js.map +1 -0
  579. package/dist/devtools/src/profiler/production-monitoring.d.ts +150 -0
  580. package/dist/devtools/src/profiler/production-monitoring.d.ts.map +1 -0
  581. package/dist/devtools/src/profiler/production-monitoring.js +274 -0
  582. package/dist/devtools/src/profiler/production-monitoring.js.map +1 -0
  583. package/dist/devtools/src/runtime/error-boundary.d.ts +302 -0
  584. package/dist/devtools/src/runtime/error-boundary.d.ts.map +1 -0
  585. package/dist/devtools/src/runtime/error-boundary.js +717 -0
  586. package/dist/devtools/src/runtime/error-boundary.js.map +1 -0
  587. package/dist/devtools/src/runtime/error-recovery.d.ts +267 -0
  588. package/dist/devtools/src/runtime/error-recovery.d.ts.map +1 -0
  589. package/dist/devtools/src/runtime/error-recovery.js +499 -0
  590. package/dist/devtools/src/runtime/error-recovery.js.map +1 -0
  591. package/dist/devtools/src/runtime/error-reporting.d.ts +287 -0
  592. package/dist/devtools/src/runtime/error-reporting.d.ts.map +1 -0
  593. package/dist/devtools/src/runtime/error-reporting.js +626 -0
  594. package/dist/devtools/src/runtime/error-reporting.js.map +1 -0
  595. package/dist/devtools/src/runtime/error-utils.d.ts +204 -0
  596. package/dist/devtools/src/runtime/error-utils.d.ts.map +1 -0
  597. package/dist/devtools/src/runtime/error-utils.js +519 -0
  598. package/dist/devtools/src/runtime/error-utils.js.map +1 -0
  599. package/dist/devtools/src/runtime/performance.d.ts +217 -0
  600. package/dist/devtools/src/runtime/performance.d.ts.map +1 -0
  601. package/dist/devtools/src/runtime/performance.js +538 -0
  602. package/dist/devtools/src/runtime/performance.js.map +1 -0
  603. package/dist/devtools/src/testing/index.d.ts +29 -0
  604. package/dist/devtools/src/testing/index.d.ts.map +1 -0
  605. package/dist/devtools/src/testing/index.js +48 -0
  606. package/dist/devtools/src/testing/index.js.map +1 -0
  607. package/dist/devtools/src/validation/enhanced-runtime.d.ts +310 -0
  608. package/dist/devtools/src/validation/enhanced-runtime.d.ts.map +1 -0
  609. package/dist/devtools/src/validation/enhanced-runtime.js +603 -0
  610. package/dist/devtools/src/validation/enhanced-runtime.js.map +1 -0
  611. package/dist/devtools/src/validation/error-reporting.d.ts +186 -0
  612. package/dist/devtools/src/validation/error-reporting.d.ts.map +1 -0
  613. package/dist/devtools/src/validation/error-reporting.js +439 -0
  614. package/dist/devtools/src/validation/error-reporting.js.map +1 -0
  615. package/package.json +6 -2
  616. package/dist/commands/analyze.d.ts.map +0 -1
  617. package/dist/commands/analyze.js.map +0 -1
  618. package/dist/commands/dev.d.ts.map +0 -1
  619. package/dist/commands/dev.js.map +0 -1
  620. package/dist/commands/generate.d.ts.map +0 -1
  621. package/dist/commands/generate.js.map +0 -1
  622. package/dist/commands/init.d.ts.map +0 -1
  623. package/dist/commands/init.js.map +0 -1
  624. package/dist/commands/migrate.d.ts.map +0 -1
  625. package/dist/commands/migrate.js.map +0 -1
  626. package/dist/commands/optimize.d.ts.map +0 -1
  627. package/dist/commands/optimize.js.map +0 -1
  628. package/dist/index.d.ts.map +0 -1
  629. package/dist/index.js.map +0 -1
  630. /package/dist/{commands → cli/src/commands}/analyze.d.ts +0 -0
  631. /package/dist/{commands → cli/src/commands}/dev.d.ts +0 -0
  632. /package/dist/{commands → cli/src/commands}/dev.js +0 -0
  633. /package/dist/{commands → cli/src/commands}/generate.d.ts +0 -0
  634. /package/dist/{commands → cli/src/commands}/init.d.ts +0 -0
  635. /package/dist/{commands → cli/src/commands}/migrate.d.ts +0 -0
  636. /package/dist/{commands → cli/src/commands}/optimize.d.ts +0 -0
  637. /package/dist/{commands → cli/src/commands}/optimize.js +0 -0
  638. /package/dist/{index.d.ts → cli/src/index.d.ts} +0 -0
package/README.md CHANGED
@@ -109,6 +109,21 @@ tacho migrate swiftui-project ./MySwiftUIApp
109
109
  tacho migrate --interactive ./ContentView.swift
110
110
  ```
111
111
 
112
+ ### Modifier Migration Utilities
113
+
114
+ ```bash
115
+ # Preview legacy `.modifier` trigger removal without touching files
116
+ tacho migrate remove-modifier-trigger --dry-run
117
+
118
+ # Apply the transformation to your source tree
119
+ tacho migrate remove-modifier-trigger --pattern "src/**/*.{ts,tsx,js,jsx}"
120
+
121
+ # Run in CI to ensure no legacy triggers remain
122
+ tacho migrate remove-modifier-trigger --check
123
+ ```
124
+
125
+ Use `--ignore` to skip certain glob patterns (for example, generated output) and `--preview`/`--dry-run` to review changes before applying them.
126
+
112
127
  ### Development Tools
113
128
 
114
129
  ```bash
package/bin/tacho.js CHANGED
@@ -1,10 +1,60 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import('../dist/index.js')
4
- .then(({ main }) => {
5
- main()
6
- })
7
- .catch((error) => {
8
- console.error('Failed to start Tacho CLI:', error)
3
+ const moduleCandidates = [
4
+ new URL('../dist/index.js', import.meta.url).href,
5
+ new URL('../dist/cli/src/index.js', import.meta.url).href,
6
+ ]
7
+
8
+ const isMissingModule = (error, candidate) => {
9
+ if (!error) return false
10
+ if (error.code === 'ERR_MODULE_NOT_FOUND') {
11
+ return true
12
+ }
13
+ return (
14
+ typeof error.message === 'string' &&
15
+ error.message.includes(candidate)
16
+ )
17
+ }
18
+
19
+ async function start() {
20
+ for (const candidate of moduleCandidates) {
21
+ try {
22
+ const { main } = await import(candidate)
23
+ if (typeof main === 'function') {
24
+ await main()
25
+ return
26
+ }
27
+ } catch (error) {
28
+ if (!isMissingModule(error, candidate)) {
29
+ console.error('Failed to start Tacho CLI:', error)
30
+ process.exit(1)
31
+ }
32
+ }
33
+ }
34
+
35
+ await startFromSource()
36
+ }
37
+
38
+ async function startFromSource() {
39
+ try {
40
+ // Register TSX loader so we can import TypeScript sources without building
41
+ await import('tsx/esm')
42
+ const { main } = await import(
43
+ new URL('../src/index.ts', import.meta.url).href
44
+ )
45
+
46
+ if (typeof main !== 'function') {
47
+ throw new Error('CLI entry did not export a main() function')
48
+ }
49
+
50
+ await main()
51
+ } catch (error) {
52
+ console.error(
53
+ 'Failed to start Tacho CLI. Build artifacts missing and TSX loader unavailable.',
54
+ error
55
+ )
9
56
  process.exit(1)
10
- })
57
+ }
58
+ }
59
+
60
+ start()
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TachUI CLI - Import Analysis Command
4
+ *
5
+ * Analyzes project imports and provides optimization recommendations
6
+ */
7
+ interface AnalyzeOptions {
8
+ project?: string;
9
+ output?: string;
10
+ interactive?: boolean;
11
+ fix?: boolean;
12
+ threshold?: number;
13
+ }
14
+ declare function analyzeImports(options: AnalyzeOptions): Promise<void>;
15
+ declare function showImportGuide(packageName?: string): Promise<void>;
16
+ declare function showCheatSheet(): Promise<void>;
17
+ export { analyzeImports, showImportGuide, showCheatSheet };
18
+ //# sourceMappingURL=analyze-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-imports.d.ts","sourceRoot":"","sources":["../../../../src/commands/analyze-imports.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAWH,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAqCD,iBAAe,cAAc,CAAC,OAAO,EAAE,cAAc,iBAwFpD;AAiCD,iBAAe,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,iBAgBlD;AAED,iBAAe,cAAc,kBAI5B;AAGD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TachUI CLI - Import Analysis Command
4
+ *
5
+ * Analyzes project imports and provides optimization recommendations
6
+ */
7
+ import { Command } from 'commander';
8
+ import { ImportOptimizer } from '../import-optimizer.js';
9
+ import { ImportGuidanceSystem } from '@tachui/devtools';
10
+ import chalk from 'chalk';
11
+ import { existsSync } from 'fs';
12
+ import { join } from 'path';
13
+ const program = new Command();
14
+ program
15
+ .name('tachui-analyze-imports')
16
+ .description('Analyze and optimize TachUI imports for better bundle size')
17
+ .version('1.0.0');
18
+ program
19
+ .command('analyze')
20
+ .description('Analyze imports in your TachUI project')
21
+ .option('-p, --project <path>', 'Project root directory', process.cwd())
22
+ .option('-o, --output <file>', 'Output report to file')
23
+ .option('-i, --interactive', 'Interactive optimization mode', false)
24
+ .option('-f, --fix', 'Automatically apply safe optimizations', false)
25
+ .option('-t, --threshold <kb>', 'Bundle size threshold for warnings', '50')
26
+ .action(async (options) => {
27
+ await analyzeImports(options);
28
+ });
29
+ program
30
+ .command('guide')
31
+ .description('Show import guidance for TachUI packages')
32
+ .argument('[package]', 'Package to show guidance for (core, primitives, etc.)')
33
+ .action(async (packageName) => {
34
+ await showImportGuide(packageName);
35
+ });
36
+ program
37
+ .command('cheat-sheet')
38
+ .description('Display TachUI import cheat sheet')
39
+ .action(async () => {
40
+ await showCheatSheet();
41
+ });
42
+ async function analyzeImports(options) {
43
+ const { project = process.cwd(), output, interactive, fix, threshold = 50, } = options;
44
+ console.log(chalk.blue('🔍 Analyzing TachUI imports...\n'));
45
+ // Check if project has TachUI
46
+ const packageJsonPath = join(project, 'package.json');
47
+ if (!existsSync(packageJsonPath)) {
48
+ console.error(chalk.red('❌ No package.json found in project directory'));
49
+ process.exit(1);
50
+ }
51
+ try {
52
+ const packageJson = JSON.parse(await import(packageJsonPath));
53
+ const hasTachUI = Object.keys({
54
+ ...packageJson.dependencies,
55
+ ...packageJson.devDependencies,
56
+ }).some(dep => dep.startsWith('@tachui/'));
57
+ if (!hasTachUI) {
58
+ console.log(chalk.yellow('⚠️ No TachUI dependencies found in this project'));
59
+ return;
60
+ }
61
+ const optimizer = new ImportOptimizer();
62
+ const optimizations = await optimizer.analyzeProject(project);
63
+ if (optimizations.length === 0) {
64
+ console.log(chalk.green('✅ All imports are already optimal!'));
65
+ return;
66
+ }
67
+ // Generate report
68
+ const report = optimizer.generateReport(optimizations);
69
+ console.log(report);
70
+ // Calculate total potential savings
71
+ const totalSavings = optimizations.reduce((sum, opt) => sum + parseInt(opt.savings.replace(/[^\d]/g, '')), 0);
72
+ if (totalSavings > threshold) {
73
+ console.log(chalk.yellow(`\n⚠️ Bundle size could be reduced by ~${totalSavings}KB`));
74
+ }
75
+ // Interactive mode
76
+ if (interactive) {
77
+ const inquirer = await import('inquirer');
78
+ const { applyOptimizations } = await inquirer.default.prompt([
79
+ {
80
+ type: 'confirm',
81
+ name: 'applyOptimizations',
82
+ message: 'Would you like to apply safe optimizations automatically?',
83
+ default: false,
84
+ },
85
+ ]);
86
+ if (applyOptimizations) {
87
+ await applyAutomaticOptimizations(project, optimizations);
88
+ }
89
+ }
90
+ // Auto-fix mode
91
+ if (fix) {
92
+ await applyAutomaticOptimizations(project, optimizations);
93
+ }
94
+ // Output to file
95
+ if (output) {
96
+ const { writeFileSync } = await import('fs-extra');
97
+ writeFileSync(output, report);
98
+ console.log(chalk.green(`\n📄 Report saved to: ${output}`));
99
+ }
100
+ }
101
+ catch (error) {
102
+ console.error(chalk.red('❌ Error analyzing imports:'), error);
103
+ process.exit(1);
104
+ }
105
+ }
106
+ async function applyAutomaticOptimizations(_projectPath, optimizations) {
107
+ console.log(chalk.blue('\n🔧 Applying automatic optimizations...\n'));
108
+ const safeOptimizations = optimizations.filter(opt => opt.risk === 'low');
109
+ if (safeOptimizations.length === 0) {
110
+ console.log(chalk.yellow('⚠️ No safe automatic optimizations available'));
111
+ return;
112
+ }
113
+ let applied = 0;
114
+ for (const opt of safeOptimizations) {
115
+ try {
116
+ // Apply optimization (simplified - would need actual file transformation)
117
+ console.log(chalk.green(`✅ ${opt.from} → ${opt.to} (saves ${opt.savings})`));
118
+ applied++;
119
+ }
120
+ catch (_error) {
121
+ console.error(chalk.red(`❌ Failed to apply: ${opt.from} → ${opt.to}`));
122
+ }
123
+ }
124
+ console.log(chalk.green(`\n🎉 Applied ${applied} optimizations successfully!`));
125
+ }
126
+ async function showImportGuide(packageName) {
127
+ const guidance = new ImportGuidanceSystem();
128
+ if (!packageName) {
129
+ // Show all available guides
130
+ console.log(chalk.blue('📚 TachUI Import Guides\n'));
131
+ console.log('Available packages:');
132
+ console.log(' • core - Core framework imports');
133
+ console.log(' • primitives - UI component imports');
134
+ console.log(' • bundle-optimization - Bundle size guidance');
135
+ console.log('\nUsage: tachui analyze guide <package>');
136
+ return;
137
+ }
138
+ const guide = guidance.generatePackageGuide(packageName);
139
+ console.log(guide);
140
+ }
141
+ async function showCheatSheet() {
142
+ const guidance = new ImportGuidanceSystem();
143
+ const cheatSheet = guidance.generateCheatSheet();
144
+ console.log(cheatSheet);
145
+ }
146
+ // Export functions for programmatic use
147
+ export { analyzeImports, showImportGuide, showCheatSheet };
148
+ // CLI execution
149
+ if (import.meta.url === `file://${process.argv[1]}`) {
150
+ program.parse();
151
+ }
152
+ //# sourceMappingURL=analyze-imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-imports.js","sourceRoot":"","sources":["../../../../src/commands/analyze-imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../../../src/commands/analyze.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmanC,eAAO,MAAM,cAAc,SAqavB,CAAA"}
@@ -5,10 +5,130 @@
5
5
  */
6
6
  import { readFileSync, statSync, writeFileSync } from 'node:fs';
7
7
  import { resolve } from 'node:path';
8
+ import * as ts from 'typescript';
8
9
  import chalk from 'chalk';
9
10
  import { Command } from 'commander';
10
11
  import { glob } from 'glob';
11
12
  import ora from 'ora';
13
+ /**
14
+ * CLI-specific concatenation pattern analysis using TypeScript AST
15
+ * Replaces regex-based approach with proper AST analysis
16
+ */
17
+ function analyzeConcatenationPatterns(content, filename = 'temp.ts') {
18
+ const patterns = [];
19
+ try {
20
+ // Parse the code into a TypeScript AST
21
+ const sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.Latest, true, filename.endsWith('.tsx') ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
22
+ // Walk the AST to find .concat() calls
23
+ function visit(node) {
24
+ if (ts.isCallExpression(node) &&
25
+ ts.isPropertyAccessExpression(node.expression) &&
26
+ node.expression.name.text === 'concat') {
27
+ // Check if this is a .build().concat() pattern
28
+ const leftExpression = node.expression.expression;
29
+ if (ts.isCallExpression(leftExpression) &&
30
+ ts.isPropertyAccessExpression(leftExpression.expression) &&
31
+ leftExpression.expression.name.text === 'build') {
32
+ // Extract left component (everything before .build())
33
+ const componentChain = leftExpression.expression.expression;
34
+ const leftComponent = extractComponentExpression(componentChain, content);
35
+ // Extract right component (first argument to .concat())
36
+ const rightComponent = node.arguments.length > 0
37
+ ? extractComponentExpression(node.arguments[0], content)
38
+ : '';
39
+ if (leftComponent && rightComponent) {
40
+ // Get source location
41
+ const start = node.getStart(sourceFile);
42
+ const end = node.getEnd();
43
+ // Simple static analysis
44
+ const hasVariable = /\$\{[^}]+\}|[a-zA-Z_$][a-zA-Z0-9_$]*\[[^\]]*\]|entry\[/.test(leftComponent + rightComponent);
45
+ const isStatic = !hasVariable;
46
+ // Accessibility analysis
47
+ const hasInteractive = /\bButton\b|\bLink\b/i.test(leftComponent + rightComponent);
48
+ const hasComplexLayout = /\bVStack\b|\bHStack\b|\bZStack\b/i.test(content);
49
+ let accessibilityNeeds;
50
+ if (hasComplexLayout) {
51
+ accessibilityNeeds = 'full';
52
+ }
53
+ else if (hasInteractive) {
54
+ accessibilityNeeds = 'aria';
55
+ }
56
+ else {
57
+ accessibilityNeeds = 'minimal';
58
+ }
59
+ patterns.push({
60
+ type: isStatic ? 'static' : 'dynamic',
61
+ location: { start, end },
62
+ leftComponent: leftComponent.trim(),
63
+ rightComponent: rightComponent.trim(),
64
+ optimizable: isStatic,
65
+ accessibilityNeeds,
66
+ });
67
+ }
68
+ }
69
+ }
70
+ // Continue traversing child nodes
71
+ ts.forEachChild(node, visit);
72
+ }
73
+ visit(sourceFile);
74
+ }
75
+ catch (error) {
76
+ // If AST parsing fails, return empty patterns (graceful fallback)
77
+ console.warn(`Failed to parse for concatenation analysis:`, error);
78
+ }
79
+ return patterns;
80
+ }
81
+ /**
82
+ * Helper function to extract component expression text from AST node
83
+ */
84
+ function extractComponentExpression(node, sourceCode) {
85
+ const start = node.getStart();
86
+ const end = node.getEnd();
87
+ return sourceCode.substring(start, end);
88
+ }
89
+ /**
90
+ * Generate comprehensive concatenation analysis for CLI reporting
91
+ */
92
+ function generateConcatenationAnalysis(allPatterns) {
93
+ const staticPatterns = allPatterns.filter(p => p.type === 'static').length;
94
+ const dynamicPatterns = allPatterns.filter(p => p.type === 'dynamic').length;
95
+ const optimizedPatterns = allPatterns.filter(p => p.optimizable).length;
96
+ // Calculate bundle savings
97
+ const baseConcatenationSize = 87.76; // KB
98
+ const selectedRuntimes = new Set(allPatterns.map(p => p.accessibilityNeeds));
99
+ const optimizedSize = selectedRuntimes.size * 5; // 5KB per runtime
100
+ const bundleSavingsKB = Math.max(0, baseConcatenationSize - optimizedSize);
101
+ // Accessibility breakdown
102
+ const accessibilityBreakdown = {
103
+ minimal: allPatterns.filter(p => p.accessibilityNeeds === 'minimal').length,
104
+ aria: allPatterns.filter(p => p.accessibilityNeeds === 'aria').length,
105
+ full: allPatterns.filter(p => p.accessibilityNeeds === 'full').length,
106
+ };
107
+ // Generate recommendations
108
+ const recommendations = [];
109
+ if (dynamicPatterns > staticPatterns) {
110
+ recommendations.push('Consider extracting variables from concatenation patterns to enable static optimization');
111
+ }
112
+ if (accessibilityBreakdown.full >
113
+ accessibilityBreakdown.minimal + accessibilityBreakdown.aria) {
114
+ recommendations.push('Many concatenations require full accessibility - consider simplifying component structures');
115
+ }
116
+ if (allPatterns.length > 10 && optimizedPatterns / allPatterns.length < 0.5) {
117
+ recommendations.push('Low optimization rate - review concatenation patterns for static optimization opportunities');
118
+ }
119
+ if (bundleSavingsKB > 50) {
120
+ recommendations.push(`High bundle savings potential: ${bundleSavingsKB.toFixed(1)}KB - implement concatenation optimization`);
121
+ }
122
+ return {
123
+ totalPatterns: allPatterns.length,
124
+ optimizedPatterns,
125
+ staticPatterns,
126
+ dynamicPatterns,
127
+ bundleSavingsKB,
128
+ accessibilityBreakdown,
129
+ recommendations,
130
+ };
131
+ }
12
132
  function analyzeFile(filePath, content) {
13
133
  const lines = content.split('\n');
14
134
  const analysis = {
@@ -28,6 +148,7 @@ function analyzeFile(filePath, content) {
28
148
  lifecycleUsage: [],
29
149
  navigationUsage: [],
30
150
  complexity: 0,
151
+ concatenationPatterns: [],
31
152
  };
32
153
  // Analyze imports
33
154
  const importMatches = content.match(/import.*from ['"]@tachui\/core['"]/g) || [];
@@ -44,9 +165,11 @@ function analyzeFile(filePath, content) {
44
165
  if (content.includes('.modifier')) {
45
166
  analysis.hasModifiers = true;
46
167
  const modifierChains = content.match(/\.modifier[\s\S]*?\.build\(\)/g) || [];
47
- analysis.modifierUsage = modifierChains.map((chain) => chain
168
+ analysis.modifierUsage = modifierChains.map(chain => chain
48
169
  .split('.')
49
- .filter((part) => part.trim() && !part.includes('modifier') && !part.includes('build()'))
170
+ .filter(part => part.trim() &&
171
+ !part.includes('modifier') &&
172
+ !part.includes('build()'))
50
173
  .join('.'));
51
174
  }
52
175
  // Analyze layout usage
@@ -57,15 +180,20 @@ function analyzeFile(filePath, content) {
57
180
  }
58
181
  // Analyze lifecycle usage
59
182
  const lifecycleModifiers = ['onAppear', 'onDisappear', 'task', 'refreshable'];
60
- lifecycleModifiers.forEach((modifier) => {
183
+ lifecycleModifiers.forEach(modifier => {
61
184
  if (content.includes(`.${modifier}(`)) {
62
185
  analysis.hasLifecycle = true;
63
186
  analysis.lifecycleUsage.push(modifier);
64
187
  }
65
188
  });
66
189
  // Analyze navigation usage
67
- const navigationComponents = ['NavigationView', 'NavigationLink', 'TabView', 'useNavigation'];
68
- navigationComponents.forEach((component) => {
190
+ const navigationComponents = [
191
+ 'NavigationView',
192
+ 'NavigationLink',
193
+ 'TabView',
194
+ 'useNavigation',
195
+ ];
196
+ navigationComponents.forEach(component => {
69
197
  if (content.includes(component)) {
70
198
  analysis.hasNavigation = true;
71
199
  analysis.navigationUsage.push(component);
@@ -73,7 +201,7 @@ function analyzeFile(filePath, content) {
73
201
  });
74
202
  // Find component definitions
75
203
  const componentMatches = content.match(/export function (\w+)\(/g) || [];
76
- analysis.components = componentMatches.map((match) => match.replace('export function ', '').replace('(', ''));
204
+ analysis.components = componentMatches.map(match => match.replace('export function ', '').replace('(', ''));
77
205
  // Calculate complexity score
78
206
  analysis.complexity += (content.match(/if\s*\(/g) || []).length * 2;
79
207
  analysis.complexity += (content.match(/for\s*\(/g) || []).length * 2;
@@ -82,6 +210,8 @@ function analyzeFile(filePath, content) {
82
210
  analysis.complexity += (content.match(/\.map\(/g) || []).length;
83
211
  analysis.complexity += (content.match(/\.filter\(/g) || []).length;
84
212
  analysis.complexity += analysis.modifierUsage.length * 0.5;
213
+ // Analyze concatenation patterns
214
+ analysis.concatenationPatterns = analyzeConcatenationPatterns(content, filePath);
85
215
  return analysis;
86
216
  }
87
217
  function generateSuggestions(results) {
@@ -92,7 +222,7 @@ function generateSuggestions(results) {
92
222
  }
93
223
  // Modifier usage suggestions
94
224
  if (results.components.withModifiers < results.components.total * 0.7) {
95
- suggestions.push('Use TachUI modifiers for consistent styling (.modifier.padding(), .foregroundColor())');
225
+ suggestions.push('Use TachUI modifiers for consistent styling (.padding(), .foregroundColor())');
96
226
  }
97
227
  // Lifecycle suggestions
98
228
  if (results.components.withLifecycle < results.components.total * 0.2) {
@@ -111,7 +241,7 @@ function generateSuggestions(results) {
111
241
  suggestions.push('Consider adding navigation (NavigationView, TabView) for better user experience');
112
242
  }
113
243
  // Layout suggestions
114
- const layoutTypes = new Set(results.patterns.layoutUsage.map((usage) => usage.split('.')[1]));
244
+ const layoutTypes = new Set(results.patterns.layoutUsage.map(usage => usage.split('.')[1]));
115
245
  if (layoutTypes.size === 1 && layoutTypes.has('VStack')) {
116
246
  suggestions.push('Consider using HStack or ZStack for more dynamic layouts');
117
247
  }
@@ -124,6 +254,7 @@ export const analyzeCommand = new Command('analyze')
124
254
  .option('--performance', 'Include performance analysis', true)
125
255
  .option('--suggestions', 'Include improvement suggestions', true)
126
256
  .option('--detailed', 'Show detailed component analysis', false)
257
+ .option('--concatenation', 'Focus on concatenation optimization analysis', false)
127
258
  .action(async (options) => {
128
259
  try {
129
260
  console.log(chalk.cyan(`
@@ -165,6 +296,19 @@ export const analyzeCommand = new Command('analyze')
165
296
  lifecycleUsage: [],
166
297
  navigationUsage: [],
167
298
  },
299
+ concatenation: {
300
+ totalPatterns: 0,
301
+ optimizedPatterns: 0,
302
+ staticPatterns: 0,
303
+ dynamicPatterns: 0,
304
+ bundleSavingsKB: 0,
305
+ accessibilityBreakdown: {
306
+ minimal: 0,
307
+ aria: 0,
308
+ full: 0,
309
+ },
310
+ recommendations: [],
311
+ },
168
312
  performance: {
169
313
  largeComponents: [],
170
314
  complexComponents: [],
@@ -220,6 +364,9 @@ export const analyzeCommand = new Command('analyze')
220
364
  }
221
365
  }
222
366
  results.files.averageSize = results.files.totalSize / results.files.total;
367
+ // Generate concatenation analysis
368
+ const allConcatenationPatterns = fileAnalyses.flatMap(f => f.concatenationPatterns);
369
+ results.concatenation = generateConcatenationAnalysis(allConcatenationPatterns);
223
370
  // Generate suggestions
224
371
  if (options.suggestions) {
225
372
  results.suggestions = generateSuggestions(results);
@@ -246,7 +393,9 @@ export const analyzeCommand = new Command('analyze')
246
393
  console.log(`${chalk.gray('With navigation:')} ${results.components.withNavigation} (${((results.components.withNavigation / results.files.total) * 100).toFixed(1)}%)`);
247
394
  // Pattern usage
248
395
  console.log(`\n${chalk.yellow('🎨 Pattern Usage:')}`);
249
- const topModifiers = [...new Set(results.patterns.modifierUsage.flat())].slice(0, 5);
396
+ const topModifiers = [
397
+ ...new Set(results.patterns.modifierUsage.flat()),
398
+ ].slice(0, 5);
250
399
  if (topModifiers.length > 0) {
251
400
  console.log(`${chalk.gray('Top modifiers:')} ${topModifiers.join(', ')}`);
252
401
  }
@@ -258,18 +407,82 @@ export const analyzeCommand = new Command('analyze')
258
407
  if (lifecycleTypes.length > 0) {
259
408
  console.log(`${chalk.gray('Lifecycle modifiers:')} ${lifecycleTypes.join(', ')}`);
260
409
  }
410
+ // Concatenation Analysis (Enhanced when --concatenation flag is used)
411
+ if (results.concatenation.totalPatterns > 0) {
412
+ console.log(`\n${chalk.yellow('🔗 Concatenation Analysis:')}`);
413
+ console.log(`${chalk.gray('Total patterns:')} ${results.concatenation.totalPatterns}`);
414
+ console.log(`${chalk.gray('✅ Static/Optimizable:')} ${results.concatenation.optimizedPatterns} (${Math.round((results.concatenation.optimizedPatterns / results.concatenation.totalPatterns) * 100)}%)`);
415
+ console.log(`${chalk.gray('🔄 Dynamic/Runtime:')} ${results.concatenation.dynamicPatterns}`);
416
+ console.log(`${chalk.gray('💾 Bundle savings:')} ${results.concatenation.bundleSavingsKB.toFixed(1)}KB`);
417
+ const { accessibilityBreakdown } = results.concatenation;
418
+ console.log(`${chalk.gray('♿ Accessibility breakdown:')} Minimal: ${accessibilityBreakdown.minimal}, ARIA: ${accessibilityBreakdown.aria}, Full: ${accessibilityBreakdown.full}`);
419
+ if (results.concatenation.recommendations.length > 0) {
420
+ console.log(`${chalk.gray('💡 Recommendations:')}`);
421
+ const maxRecs = options.concatenation
422
+ ? results.concatenation.recommendations.length
423
+ : 3;
424
+ results.concatenation.recommendations
425
+ .slice(0, maxRecs)
426
+ .forEach((rec, index) => {
427
+ console.log(` ${index + 1}. ${rec}`);
428
+ });
429
+ }
430
+ // Enhanced concatenation analysis when --concatenation flag is used
431
+ if (options.concatenation && allConcatenationPatterns.length > 0) {
432
+ console.log(`\n${chalk.cyan('📋 Detailed Concatenation Report:')}`);
433
+ // Group patterns by file for detailed analysis
434
+ const patternsByFile = new Map();
435
+ fileAnalyses.forEach(analysis => {
436
+ if (analysis.concatenationPatterns.length > 0) {
437
+ const shortFilename = analysis.file.split('/').pop() || analysis.file;
438
+ patternsByFile.set(shortFilename, analysis.concatenationPatterns);
439
+ }
440
+ });
441
+ patternsByFile.forEach((patterns, filename) => {
442
+ console.log(`\n${chalk.green(filename)}:`);
443
+ patterns.forEach((pattern, index) => {
444
+ const optimizationIcon = pattern.optimizable ? '✅' : '🔄';
445
+ const accessibilityColor = pattern.accessibilityNeeds === 'minimal'
446
+ ? chalk.green
447
+ : pattern.accessibilityNeeds === 'aria'
448
+ ? chalk.yellow
449
+ : chalk.red;
450
+ console.log(` ${optimizationIcon} Pattern ${index + 1}: ${pattern.type} (${accessibilityColor(pattern.accessibilityNeeds)})`);
451
+ console.log(` Left: ${pattern.leftComponent.substring(0, 50)}${pattern.leftComponent.length > 50 ? '...' : ''}`);
452
+ console.log(` Right: ${pattern.rightComponent.substring(0, 50)}${pattern.rightComponent.length > 50 ? '...' : ''}`);
453
+ });
454
+ });
455
+ // Optimization opportunities
456
+ const optimizablePatterns = allConcatenationPatterns.filter(p => !p.optimizable);
457
+ if (optimizablePatterns.length > 0) {
458
+ console.log(`\n${chalk.yellow('🚀 Optimization Opportunities:')}`);
459
+ optimizablePatterns.slice(0, 5).forEach((pattern, index) => {
460
+ console.log(` ${index + 1}. Convert dynamic pattern to static in ${pattern.leftComponent}`);
461
+ });
462
+ }
463
+ console.log(`\n${chalk.cyan('💾 Bundle Impact Projection:')}`);
464
+ console.log(` Current concatenation system: 87.76KB`);
465
+ console.log(` Optimized system: ${(87.76 - results.concatenation.bundleSavingsKB).toFixed(1)}KB`);
466
+ console.log(` ${chalk.green(`Savings: ${results.concatenation.bundleSavingsKB.toFixed(1)}KB (${Math.round((results.concatenation.bundleSavingsKB / 87.76) * 100)}%)`)}`);
467
+ }
468
+ }
469
+ else if (options.concatenation) {
470
+ console.log(`\n${chalk.yellow('🔗 Concatenation Analysis:')}`);
471
+ console.log(chalk.gray('No concatenation patterns found in analyzed files'));
472
+ console.log(chalk.gray('💡 Concatenation optimization is available when you use .build().concat() patterns'));
473
+ }
261
474
  // Performance insights
262
475
  if (options.performance) {
263
476
  console.log(`\n${chalk.yellow('⚡ Performance Insights:')}`);
264
477
  if (results.performance.largeComponents.length > 0) {
265
478
  console.log(`${chalk.red('Large components:')} ${results.performance.largeComponents.length}`);
266
- results.performance.largeComponents.slice(0, 3).forEach((comp) => {
479
+ results.performance.largeComponents.slice(0, 3).forEach(comp => {
267
480
  console.log(` ${comp.file}: ${comp.lines} lines`);
268
481
  });
269
482
  }
270
483
  if (results.performance.complexComponents.length > 0) {
271
484
  console.log(`${chalk.red('Complex components:')} ${results.performance.complexComponents.length}`);
272
- results.performance.complexComponents.slice(0, 3).forEach((comp) => {
485
+ results.performance.complexComponents.slice(0, 3).forEach(comp => {
273
486
  console.log(` ${comp.file}: complexity ${comp.complexity}`);
274
487
  });
275
488
  }
@@ -289,9 +502,9 @@ export const analyzeCommand = new Command('analyze')
289
502
  if (options.detailed && fileAnalyses.length > 0) {
290
503
  console.log(`\n${chalk.yellow('🔍 Detailed Component Analysis:')}`);
291
504
  fileAnalyses
292
- .filter((analysis) => analysis.components.length > 0)
505
+ .filter(analysis => analysis.components.length > 0)
293
506
  .slice(0, 5)
294
- .forEach((analysis) => {
507
+ .forEach(analysis => {
295
508
  const fileName = analysis.file.split('/').pop();
296
509
  console.log(`\n${chalk.cyan(fileName)}:`);
297
510
  console.log(` Components: ${analysis.components.join(', ')}`);