@tanstack/cta-engine 0.10.0-alpha.21 → 0.10.0-alpha.25

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 (340) hide show
  1. package/dist/add-ons.js +91 -5
  2. package/dist/add.js +125 -0
  3. package/dist/cli.js +132 -0
  4. package/dist/config-file.js +9 -14
  5. package/dist/constants.js +2 -0
  6. package/dist/create-app.js +451 -142
  7. package/dist/custom-add-on.js +254 -0
  8. package/dist/environment.js +32 -64
  9. package/dist/file-helper.js +18 -0
  10. package/dist/index.js +1 -17
  11. package/dist/mcp.js +229 -0
  12. package/dist/options.js +333 -9
  13. package/dist/package-manager.js +6 -51
  14. package/dist/templates.js +6 -0
  15. package/dist/toolchain.js +6 -0
  16. package/dist/types/add-ons.d.ts +8 -3
  17. package/dist/types/add.d.ts +3 -0
  18. package/dist/types/cli.d.ts +7 -0
  19. package/dist/types/config-file.d.ts +4 -6
  20. package/dist/types/constants.d.ts +3 -0
  21. package/dist/types/create-app.d.ts +7 -1
  22. package/dist/types/custom-add-on.d.ts +3 -0
  23. package/dist/types/environment.d.ts +1 -2
  24. package/dist/types/file-helper.d.ts +2 -0
  25. package/dist/types/index.d.ts +1 -20
  26. package/dist/types/mcp.d.ts +7 -0
  27. package/dist/types/options.d.ts +6 -2
  28. package/dist/types/package-manager.d.ts +1 -18
  29. package/dist/types/templates.d.ts +1 -0
  30. package/dist/types/toolchain.d.ts +3 -0
  31. package/dist/types/types.d.ts +85 -788
  32. package/dist/types/utils.d.ts +0 -5
  33. package/dist/types.js +1 -65
  34. package/dist/utils.js +0 -9
  35. package/package.json +12 -9
  36. package/src/add-ons.ts +123 -7
  37. package/src/add.ts +186 -0
  38. package/src/cli.ts +210 -0
  39. package/src/config-file.ts +17 -26
  40. package/src/constants.ts +5 -0
  41. package/src/create-app.ts +730 -180
  42. package/src/custom-add-on.ts +325 -0
  43. package/src/environment.ts +33 -77
  44. package/src/file-helper.ts +20 -0
  45. package/src/index.ts +1 -77
  46. package/src/mcp.ts +302 -0
  47. package/src/options.ts +409 -8
  48. package/src/package-manager.ts +9 -80
  49. package/src/templates.ts +7 -0
  50. package/src/toolchain.ts +7 -0
  51. package/src/types.ts +87 -175
  52. package/src/utils.ts +0 -17
  53. package/templates/react/add-on/clerk/README.md +3 -0
  54. package/templates/react/add-on/clerk/assets/_dot_env.local.append +2 -0
  55. package/templates/react/add-on/clerk/assets/src/integrations/clerk/header-user.tsx +19 -0
  56. package/templates/react/add-on/clerk/assets/src/integrations/clerk/provider.tsx +18 -0
  57. package/templates/react/add-on/clerk/assets/src/routes/demo.clerk.tsx +20 -0
  58. package/templates/react/add-on/clerk/info.json +13 -0
  59. package/templates/react/add-on/clerk/package.json +5 -0
  60. package/templates/react/add-on/convex/README.md +4 -0
  61. package/templates/react/add-on/convex/assets/_dot_cursorrules.append +93 -0
  62. package/templates/react/add-on/convex/assets/_dot_env.local.append +3 -0
  63. package/templates/react/add-on/convex/assets/convex/products.ts +8 -0
  64. package/templates/react/add-on/convex/assets/convex/schema.ts +10 -0
  65. package/templates/react/add-on/convex/assets/src/integrations/convex/provider.tsx +20 -0
  66. package/templates/react/add-on/convex/assets/src/routes/demo.convex.tsx +33 -0
  67. package/templates/react/add-on/convex/info.json +13 -0
  68. package/templates/react/add-on/convex/package.json +6 -0
  69. package/templates/react/add-on/form/assets/src/components/demo.FormComponents.tsx.ejs +300 -0
  70. package/templates/react/add-on/form/assets/src/hooks/demo.form-context.ts +4 -0
  71. package/templates/react/add-on/form/assets/src/hooks/demo.form.ts +22 -0
  72. package/templates/react/add-on/form/assets/src/routes/demo.form.address.tsx.ejs +213 -0
  73. package/templates/react/add-on/form/assets/src/routes/demo.form.simple.tsx.ejs +77 -0
  74. package/templates/react/add-on/form/info.json +26 -0
  75. package/templates/react/add-on/form/package.json +6 -0
  76. package/templates/react/add-on/module-federation/assets/module-federation.config.js.ejs +31 -0
  77. package/templates/react/add-on/module-federation/assets/src/demo-mf-component.tsx +3 -0
  78. package/templates/react/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +11 -0
  79. package/templates/react/add-on/module-federation/info.json +7 -0
  80. package/templates/react/add-on/module-federation/package.json +5 -0
  81. package/templates/react/add-on/netlify/README.md +11 -0
  82. package/templates/react/add-on/netlify/info.json +7 -0
  83. package/templates/react/add-on/sentry/assets/_dot_cursorrules.append +22 -0
  84. package/templates/react/add-on/sentry/assets/_dot_env.local.append +11 -0
  85. package/templates/react/add-on/sentry/assets/src/app/global-middleware.ts +11 -0
  86. package/templates/react/add-on/sentry/assets/src/routes/demo.sentry.testing.tsx +489 -0
  87. package/templates/react/add-on/sentry/info.json +14 -0
  88. package/templates/react/add-on/sentry/package.json +5 -0
  89. package/templates/react/add-on/shadcn/README.md +7 -0
  90. package/templates/react/add-on/shadcn/assets/_dot_cursorrules.append +7 -0
  91. package/templates/react/add-on/shadcn/assets/components.json +21 -0
  92. package/templates/react/add-on/shadcn/assets/src/lib/utils.ts +6 -0
  93. package/templates/react/add-on/shadcn/assets/src/styles.css +138 -0
  94. package/templates/react/add-on/shadcn/info.json +7 -0
  95. package/templates/react/add-on/shadcn/package.json +9 -0
  96. package/templates/react/add-on/start/assets/_dot_gitignore.append +2 -0
  97. package/templates/react/add-on/start/assets/app.config.ts.ejs +32 -0
  98. package/templates/react/add-on/start/assets/src/api.ts +6 -0
  99. package/templates/react/add-on/start/assets/src/client.tsx.ejs +33 -0
  100. package/templates/react/add-on/start/assets/src/router.tsx.ejs +48 -0
  101. package/templates/react/add-on/start/assets/src/routes/api.demo-names.ts +11 -0
  102. package/templates/react/add-on/start/assets/src/routes/demo.start.api-request.tsx.ejs +33 -0
  103. package/templates/react/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +50 -0
  104. package/templates/react/add-on/start/assets/src/ssr.tsx.ejs +30 -0
  105. package/templates/react/add-on/start/info.json +18 -0
  106. package/templates/react/add-on/start/package.json +13 -0
  107. package/templates/react/add-on/store/assets/src/lib/demo-store.ts +13 -0
  108. package/templates/react/add-on/store/assets/src/routes/demo.store.tsx.ejs +75 -0
  109. package/templates/react/add-on/store/info.json +13 -0
  110. package/templates/react/add-on/store/package.json +6 -0
  111. package/templates/react/add-on/t3env/README.md +16 -0
  112. package/templates/react/add-on/t3env/assets/src/env.ts +39 -0
  113. package/templates/react/add-on/t3env/info.json +10 -0
  114. package/templates/react/add-on/t3env/package.json +6 -0
  115. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/init.ts +9 -0
  116. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/react.ts +4 -0
  117. package/templates/react/add-on/tRPC/assets/src/integrations/trpc/router.ts +18 -0
  118. package/templates/react/add-on/tRPC/assets/src/routes/api.trpc.$.tsx +16 -0
  119. package/templates/react/add-on/tRPC/info.json +9 -0
  120. package/templates/react/add-on/tRPC/package.json +9 -0
  121. package/templates/react/add-on/table/assets/src/data/demo-table-data.ts +50 -0
  122. package/templates/react/add-on/table/assets/src/routes/demo.table.tsx.ejs +373 -0
  123. package/templates/react/add-on/table/info.json +13 -0
  124. package/templates/react/add-on/table/package.json +7 -0
  125. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/layout.tsx +5 -0
  126. package/templates/react/add-on/tanstack-query/assets/src/integrations/tanstack-query/root-provider.tsx.ejs +70 -0
  127. package/templates/react/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx.ejs +53 -0
  128. package/templates/react/add-on/tanstack-query/info.json +13 -0
  129. package/templates/react/add-on/tanstack-query/package.json +6 -0
  130. package/templates/react/base/README.md.ejs +558 -0
  131. package/templates/react/base/_dot_gitignore +5 -0
  132. package/templates/react/base/_dot_vscode/settings.biome.json +35 -0
  133. package/templates/react/base/_dot_vscode/settings.json +11 -0
  134. package/templates/react/base/index.html.ejs +20 -0
  135. package/templates/react/base/package.biome.json +10 -0
  136. package/templates/react/base/package.eslintprettier.json +11 -0
  137. package/templates/react/base/package.json +30 -0
  138. package/templates/react/base/package.ts.json +7 -0
  139. package/templates/react/base/package.tw.json +6 -0
  140. package/templates/react/base/public/favicon.ico +0 -0
  141. package/templates/react/base/public/logo192.png +0 -0
  142. package/templates/react/base/public/logo512.png +0 -0
  143. package/templates/react/base/public/manifest.json +25 -0
  144. package/templates/react/base/public/robots.txt +3 -0
  145. package/templates/react/base/src/App.css +38 -0
  146. package/templates/react/base/src/App.test.tsx.ejs +10 -0
  147. package/templates/react/base/src/App.tsx.ejs +74 -0
  148. package/templates/react/base/src/components/Header.tsx.ejs +27 -0
  149. package/templates/react/base/src/logo.svg +44 -0
  150. package/templates/react/base/src/reportWebVitals.ts.ejs +28 -0
  151. package/templates/react/base/src/styles.css.ejs +15 -0
  152. package/templates/react/base/toolchain/.prettierignore +3 -0
  153. package/templates/react/base/toolchain/biome.json +31 -0
  154. package/templates/react/base/toolchain/eslint.config.js +5 -0
  155. package/templates/react/base/toolchain/prettier.config.js +10 -0
  156. package/templates/react/base/tsconfig.json.ejs +29 -0
  157. package/templates/react/base/vite.config.js.ejs +23 -0
  158. package/templates/react/code-router/src/main.tsx.ejs +92 -0
  159. package/templates/react/example/tanchat/README.md +37 -0
  160. package/templates/react/example/tanchat/assets/_dot_env.local.append +2 -0
  161. package/templates/react/example/tanchat/assets/public/example-guitar-flowers.jpg +0 -0
  162. package/templates/react/example/tanchat/assets/public/example-guitar-motherboard.jpg +0 -0
  163. package/templates/react/example/tanchat/assets/public/example-guitar-racing.jpg +0 -0
  164. package/templates/react/example/tanchat/assets/public/example-guitar-steamer-trunk.jpg +0 -0
  165. package/templates/react/example/tanchat/assets/public/example-guitar-superhero.jpg +0 -0
  166. package/templates/react/example/tanchat/assets/public/example-guitar-traveling.jpg +0 -0
  167. package/templates/react/example/tanchat/assets/public/example-guitar-video-games.jpg +0 -0
  168. package/templates/react/example/tanchat/assets/src/components/example-AIAssistant.tsx +173 -0
  169. package/templates/react/example/tanchat/assets/src/components/example-GuitarRecommendation.tsx +47 -0
  170. package/templates/react/example/tanchat/assets/src/data/example-guitars.ts +83 -0
  171. package/templates/react/example/tanchat/assets/src/demo.index.css +220 -0
  172. package/templates/react/example/tanchat/assets/src/integrations/tanchat/header-user.tsx +5 -0
  173. package/templates/react/example/tanchat/assets/src/routes/api.messages.ts +24 -0
  174. package/templates/react/example/tanchat/assets/src/routes/api.sse.ts +23 -0
  175. package/templates/react/example/tanchat/assets/src/routes/example.chat.tsx +159 -0
  176. package/templates/react/example/tanchat/assets/src/routes/example.guitars/$guitarId.tsx +50 -0
  177. package/templates/react/example/tanchat/assets/src/routes/example.guitars/index.tsx +54 -0
  178. package/templates/react/example/tanchat/assets/src/store/example-assistant.ts +3 -0
  179. package/templates/react/example/tanchat/assets/src/utils/demo.ai.ts +62 -0
  180. package/templates/react/example/tanchat/assets/src/utils/demo.sse.ts +31 -0
  181. package/templates/react/example/tanchat/assets/src/utils/demo.tools.ts +47 -0
  182. package/templates/react/example/tanchat/info.json +19 -0
  183. package/templates/react/example/tanchat/package.json +16 -0
  184. package/templates/react/file-router/package.fr.json +5 -0
  185. package/templates/react/file-router/src/main.tsx.ejs +55 -0
  186. package/templates/react/file-router/src/routes/__root.tsx.ejs +82 -0
  187. package/templates/solid/add-on/form/assets/src/routes/demo.form.tsx.ejs +352 -0
  188. package/templates/solid/add-on/form/info.json +13 -0
  189. package/templates/solid/add-on/form/package.json +5 -0
  190. package/templates/solid/add-on/module-federation/assets/module-federation.config.js.ejs +27 -0
  191. package/templates/solid/add-on/module-federation/assets/src/demo-mf-component.tsx +3 -0
  192. package/templates/solid/add-on/module-federation/assets/src/demo-mf-self-contained.tsx +9 -0
  193. package/templates/solid/add-on/module-federation/info.json +7 -0
  194. package/templates/solid/add-on/module-federation/package.json +5 -0
  195. package/templates/solid/add-on/sentry/assets/_dot_cursorrules.append +22 -0
  196. package/templates/solid/add-on/sentry/assets/_dot_env.local.append +2 -0
  197. package/templates/solid/add-on/sentry/assets/src/routes/demo.sentry.bad-event-handler.tsx +20 -0
  198. package/templates/solid/add-on/sentry/info.json +13 -0
  199. package/templates/solid/add-on/sentry/package.json +5 -0
  200. package/templates/solid/add-on/solid-ui/README.md +9 -0
  201. package/templates/solid/add-on/solid-ui/assets/src/lib/utils.ts +6 -0
  202. package/templates/solid/add-on/solid-ui/assets/src/styles.css +138 -0
  203. package/templates/solid/add-on/solid-ui/assets/ui.config.json +13 -0
  204. package/templates/solid/add-on/solid-ui/info.json +11 -0
  205. package/templates/solid/add-on/solid-ui/package.json +9 -0
  206. package/templates/solid/add-on/start/assets/app.config.ts +16 -0
  207. package/templates/solid/add-on/start/assets/src/api.ts +6 -0
  208. package/templates/solid/add-on/start/assets/src/client.tsx +7 -0
  209. package/templates/solid/add-on/start/assets/src/router.tsx.ejs +24 -0
  210. package/templates/solid/add-on/start/assets/src/routes/demo.start.server-funcs.tsx +49 -0
  211. package/templates/solid/add-on/start/assets/src/ssr.tsx +12 -0
  212. package/templates/solid/add-on/start/info.json +14 -0
  213. package/templates/solid/add-on/start/package.json +12 -0
  214. package/templates/solid/add-on/store/assets/src/lib/demo-store.ts +13 -0
  215. package/templates/solid/add-on/store/assets/src/routes/demo.store.tsx.ejs +77 -0
  216. package/templates/solid/add-on/store/info.json +13 -0
  217. package/templates/solid/add-on/store/package.json +6 -0
  218. package/templates/solid/add-on/t3env/README.md +16 -0
  219. package/templates/solid/add-on/t3env/assets/src/env.ts +39 -0
  220. package/templates/solid/add-on/t3env/info.json +10 -0
  221. package/templates/solid/add-on/t3env/package.json +6 -0
  222. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/header-user.tsx +5 -0
  223. package/templates/solid/add-on/tanstack-query/assets/src/integrations/tanstack-query/provider.tsx +15 -0
  224. package/templates/solid/add-on/tanstack-query/assets/src/routes/demo.tanstack-query.tsx +30 -0
  225. package/templates/solid/add-on/tanstack-query/info.json +13 -0
  226. package/templates/solid/add-on/tanstack-query/package.json +6 -0
  227. package/templates/solid/base/README.md.ejs +215 -0
  228. package/templates/solid/base/_dot_cursorrules.append +35 -0
  229. package/templates/solid/base/_dot_gitignore +5 -0
  230. package/templates/solid/base/_dot_vscode/settings.biome.json +35 -0
  231. package/templates/solid/base/_dot_vscode/settings.json +11 -0
  232. package/templates/solid/base/index.html.ejs +20 -0
  233. package/templates/solid/base/package.biome.json +10 -0
  234. package/templates/solid/base/package.eslintprettier.json +11 -0
  235. package/templates/solid/base/package.json +23 -0
  236. package/templates/solid/base/package.ts.json +5 -0
  237. package/templates/solid/base/package.tw.json +6 -0
  238. package/templates/solid/base/public/favicon.ico +0 -0
  239. package/templates/solid/base/public/logo192.png +0 -0
  240. package/templates/solid/base/public/logo512.png +0 -0
  241. package/templates/solid/base/public/manifest.json +25 -0
  242. package/templates/solid/base/public/robots.txt +3 -0
  243. package/templates/solid/base/src/App.css +0 -0
  244. package/templates/solid/base/src/App.tsx.ejs +47 -0
  245. package/templates/solid/base/src/components/Header.tsx.ejs +26 -0
  246. package/templates/solid/base/src/logo.svg +120 -0
  247. package/templates/solid/base/src/styles.css.ejs +15 -0
  248. package/templates/solid/base/toolchain/.prettierignore +3 -0
  249. package/templates/solid/base/toolchain/biome.json +31 -0
  250. package/templates/solid/base/toolchain/eslint.config.js +5 -0
  251. package/templates/solid/base/toolchain/prettier.config.js +10 -0
  252. package/templates/solid/base/tsconfig.json.ejs +31 -0
  253. package/templates/solid/base/vite.config.js.ejs +22 -0
  254. package/templates/solid/code-router/src/main.tsx.ejs +71 -0
  255. package/templates/solid/example/tanchat/README.md +52 -0
  256. package/templates/solid/example/tanchat/assets/ai-streaming-server/README.md +110 -0
  257. package/templates/solid/example/tanchat/assets/ai-streaming-server/_dot_env.example +1 -0
  258. package/templates/solid/example/tanchat/assets/ai-streaming-server/package.json +26 -0
  259. package/templates/solid/example/tanchat/assets/ai-streaming-server/src/index.ts +102 -0
  260. package/templates/solid/example/tanchat/assets/ai-streaming-server/tsconfig.json +15 -0
  261. package/templates/solid/example/tanchat/assets/src/components/demo.SettingsDialog.tsx +149 -0
  262. package/templates/solid/example/tanchat/assets/src/demo.index.css +227 -0
  263. package/templates/solid/example/tanchat/assets/src/lib/demo-store.ts +13 -0
  264. package/templates/solid/example/tanchat/assets/src/routes/example.chat.tsx +435 -0
  265. package/templates/solid/example/tanchat/assets/src/store/demo.hooks.ts +17 -0
  266. package/templates/solid/example/tanchat/assets/src/store/demo.store.ts +133 -0
  267. package/templates/solid/example/tanchat/info.json +14 -0
  268. package/templates/solid/example/tanchat/package.json +7 -0
  269. package/templates/solid/file-router/package.fr.json +5 -0
  270. package/templates/solid/file-router/src/main.tsx.ejs +47 -0
  271. package/templates/solid/file-router/src/routes/__root.tsx.ejs +41 -0
  272. package/templates/solid/file-router/src/routes/index.tsx +43 -0
  273. package/tests/cra.test.ts +293 -0
  274. package/tests/snapshots/cra/cr-js-npm.json +33 -0
  275. package/tests/snapshots/cra/cr-ts-npm.json +34 -0
  276. package/tests/snapshots/cra/cr-ts-start-npm.json +38 -0
  277. package/tests/snapshots/cra/fr-ts-npm.json +34 -0
  278. package/tests/snapshots/cra/fr-ts-tw-npm.json +33 -0
  279. package/tests/snapshots/cra/solid-cr-js-npm.json +31 -0
  280. package/tests/snapshots/cra/solid-cr-ts-npm.json +32 -0
  281. package/tests/snapshots/cra/solid-cr-ts-start-npm.json +36 -0
  282. package/tests/snapshots/cra/solid-fr-ts-npm.json +33 -0
  283. package/tests/snapshots/cra/solid-fr-ts-tw-npm.json +32 -0
  284. package/tests/test-utilities.ts +87 -0
  285. package/dist/add-to-app.js +0 -169
  286. package/dist/custom-add-ons/add-on.js +0 -175
  287. package/dist/custom-add-ons/shared.js +0 -117
  288. package/dist/custom-add-ons/starter.js +0 -84
  289. package/dist/file-helpers.js +0 -165
  290. package/dist/frameworks.js +0 -92
  291. package/dist/integrations/git.js +0 -4
  292. package/dist/integrations/shadcn.js +0 -33
  293. package/dist/package-json.js +0 -48
  294. package/dist/special-steps/index.js +0 -24
  295. package/dist/special-steps/rimraf-node-modules.js +0 -16
  296. package/dist/template-file.js +0 -112
  297. package/dist/types/add-to-app.d.ts +0 -17
  298. package/dist/types/custom-add-ons/add-on.d.ts +0 -69
  299. package/dist/types/custom-add-ons/shared.d.ts +0 -15
  300. package/dist/types/custom-add-ons/starter.d.ts +0 -7
  301. package/dist/types/file-helpers.d.ts +0 -15
  302. package/dist/types/frameworks.d.ts +0 -7
  303. package/dist/types/integrations/git.d.ts +0 -2
  304. package/dist/types/integrations/shadcn.d.ts +0 -2
  305. package/dist/types/package-json.d.ts +0 -7
  306. package/dist/types/special-steps/index.d.ts +0 -2
  307. package/dist/types/special-steps/rimraf-node-modules.d.ts +0 -2
  308. package/dist/types/template-file.d.ts +0 -2
  309. package/src/add-to-app.ts +0 -274
  310. package/src/custom-add-ons/add-on.ts +0 -261
  311. package/src/custom-add-ons/shared.ts +0 -161
  312. package/src/custom-add-ons/starter.ts +0 -126
  313. package/src/file-helpers.ts +0 -235
  314. package/src/frameworks.ts +0 -134
  315. package/src/integrations/git.ts +0 -7
  316. package/src/integrations/shadcn.ts +0 -54
  317. package/src/package-json.ts +0 -69
  318. package/src/special-steps/index.ts +0 -36
  319. package/src/special-steps/rimraf-node-modules.ts +0 -25
  320. package/src/template-file.ts +0 -150
  321. package/tests/add-ons.test.ts +0 -67
  322. package/tests/add-to-app.test.ts +0 -358
  323. package/tests/config-file.test.ts +0 -68
  324. package/tests/create-app.test.ts +0 -120
  325. package/tests/custom-add-ons/add-on.test.ts +0 -12
  326. package/tests/custom-add-ons/shared.test.ts +0 -257
  327. package/tests/custom-add-ons/starter.test.ts +0 -58
  328. package/tests/environment.test.ts +0 -115
  329. package/tests/file-helper.test.ts +0 -90
  330. package/tests/frameworks.test.ts +0 -95
  331. package/tests/index.test.ts +0 -9
  332. package/tests/integrations/git.test.ts +0 -20
  333. package/tests/integrations/shadcn.test.ts +0 -91
  334. package/tests/options.test.ts +0 -42
  335. package/tests/package-json.test.ts +0 -63
  336. package/tests/package-manager.test.ts +0 -154
  337. package/tests/setupVitest.ts +0 -6
  338. package/tests/template-file.test.ts +0 -178
  339. package/tests/utils.test.ts +0 -23
  340. package/vitest.config.ts +0 -21
@@ -1,165 +0,0 @@
1
- import { readdir } from 'node:fs/promises';
2
- import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
3
- import { basename, extname, resolve } from 'node:path';
4
- import parseGitignore from 'parse-gitignore';
5
- import ignore from 'ignore';
6
- const BINARY_EXTENSIONS = ['.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico'];
7
- export function readFileHelper(path) {
8
- if (isBinaryFile(path)) {
9
- return `base64::${readFileSync(path).toString('base64')}`;
10
- }
11
- else {
12
- return readFileSync(path, 'utf-8').toString();
13
- }
14
- }
15
- export function isBinaryFile(path) {
16
- return BINARY_EXTENSIONS.includes(extname(path));
17
- }
18
- export function convertBinaryContentsToBase64(contents) {
19
- return `base64::${Buffer.from(contents).toString('base64')}`;
20
- }
21
- export function isBase64(content) {
22
- return content.startsWith('base64::');
23
- }
24
- export function getBinaryFile(content) {
25
- if (content.startsWith('base64::')) {
26
- const binaryContent = Buffer.from(content.replace('base64::', ''), 'base64');
27
- return binaryContent;
28
- }
29
- return null;
30
- }
31
- export function relativePath(from, to) {
32
- const cleanedFrom = from.startsWith('./') ? from.slice(2) : from;
33
- const cleanedTo = to.startsWith('./') ? to.slice(2) : to;
34
- const fromSegments = cleanedFrom.split('/');
35
- const toSegments = cleanedTo.split('/');
36
- fromSegments.pop();
37
- toSegments.pop();
38
- let commonIndex = 0;
39
- while (commonIndex < fromSegments.length &&
40
- commonIndex < toSegments.length &&
41
- fromSegments[commonIndex] === toSegments[commonIndex]) {
42
- commonIndex++;
43
- }
44
- const upLevels = fromSegments.length - commonIndex;
45
- const downLevels = toSegments.slice(commonIndex);
46
- if (upLevels === 0 && downLevels.length === 0) {
47
- return `./${basename(to)}`;
48
- }
49
- else if (upLevels === 0 && downLevels.length > 0) {
50
- return `./${downLevels.join('/')}/${basename(to)}`;
51
- }
52
- else {
53
- const relativePath = [...Array(upLevels).fill('..'), ...downLevels].join('/');
54
- return `${relativePath}/${basename(to)}`;
55
- }
56
- }
57
- export function isDirectory(path) {
58
- return statSync(path).isDirectory();
59
- }
60
- export function findFilesRecursively(path, files) {
61
- const dirFiles = readdirSync(path);
62
- for (const file of dirFiles) {
63
- const filePath = resolve(path, file);
64
- if (isDirectory(filePath)) {
65
- findFilesRecursively(filePath, files);
66
- }
67
- else {
68
- files[filePath] = readFileHelper(filePath);
69
- }
70
- }
71
- }
72
- async function recursivelyGatherFilesHelper(basePath, path, files, ignore) {
73
- const dirFiles = await readdir(path, { withFileTypes: true });
74
- for (const file of dirFiles) {
75
- if (ignore(file.name)) {
76
- continue;
77
- }
78
- if (file.isDirectory()) {
79
- await recursivelyGatherFilesHelper(basePath, resolve(path, file.name), files, ignore);
80
- }
81
- else {
82
- const filePath = resolve(path, file.name);
83
- files[filePath.replace(basePath, '.')] = await readFileHelper(filePath);
84
- }
85
- }
86
- }
87
- export async function recursivelyGatherFiles(path, includeProjectFiles = true) {
88
- const ignore = createIgnore(path, includeProjectFiles);
89
- const files = {};
90
- await recursivelyGatherFilesHelper(path, path, files, ignore);
91
- return files;
92
- }
93
- async function recursivelyGatherFilesFromEnvironmentHelper(environment, basePath, path, files, ignore) {
94
- const dirFiles = await environment.readdir(path);
95
- for (const file of dirFiles) {
96
- if (ignore(file)) {
97
- continue;
98
- }
99
- if (environment.isDirectory(resolve(path, file))) {
100
- await recursivelyGatherFilesFromEnvironmentHelper(environment, basePath, resolve(path, file), files, ignore);
101
- }
102
- else {
103
- const filePath = resolve(path, file);
104
- files[filePath.replace(basePath, '.')] =
105
- await environment.readFile(filePath);
106
- }
107
- }
108
- }
109
- export async function recursivelyGatherFilesFromEnvironment(environment, path, includeProjectFiles = true) {
110
- const ignore = createIgnore(path, includeProjectFiles);
111
- const files = {};
112
- await recursivelyGatherFilesFromEnvironmentHelper(environment, path, path, files, ignore);
113
- return files;
114
- }
115
- export const IGNORE_FILES = [
116
- '.starter',
117
- '.add-on',
118
- '.cta.json',
119
- '.git',
120
- 'add-on-info.json',
121
- 'add-on.json',
122
- 'build',
123
- 'bun.lock',
124
- 'bun.lockb',
125
- 'deno.lock',
126
- 'dist',
127
- 'node_modules',
128
- 'package-lock.json',
129
- 'pnpm-lock.yaml',
130
- 'starter.json',
131
- 'starter-info.json',
132
- 'yarn.lock',
133
- ];
134
- const PROJECT_FILES = ['package.json'];
135
- export function createIgnore(path, includeProjectFiles = true) {
136
- const ignoreList = existsSync(resolve(path, '.gitignore'))
137
- ? parseGitignore(readFileSync(resolve(path, '.gitignore'))).patterns
138
- : [];
139
- const ig = ignore().add(ignoreList);
140
- return (filePath) => {
141
- const fileName = basename(filePath);
142
- if (IGNORE_FILES.includes(fileName) ||
143
- (includeProjectFiles && PROJECT_FILES.includes(fileName))) {
144
- return true;
145
- }
146
- const nameWithoutDotSlash = fileName.replace(/^\.\//, '');
147
- return ig.ignores(nameWithoutDotSlash);
148
- };
149
- }
150
- export function cleanUpFiles(files, targetDir) {
151
- return Object.keys(files).reduce((acc, file) => {
152
- if (basename(file) !== '.cta.json') {
153
- acc[targetDir ? file.replace(targetDir, '.') : file] = files[file];
154
- }
155
- return acc;
156
- }, {});
157
- }
158
- export function cleanUpFileArray(files, targetDir) {
159
- return files.reduce((acc, file) => {
160
- if (basename(file) !== '.cta.json') {
161
- acc.push(targetDir ? file.replace(targetDir, '.') : file);
162
- }
163
- return acc;
164
- }, []);
165
- }
@@ -1,92 +0,0 @@
1
- import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
- import { findFilesRecursively, isDirectory, readFileHelper, } from './file-helpers.js';
4
- const frameworks = [];
5
- function getAddOns(framework) {
6
- const addOns = [];
7
- for (const addOnsBase of framework.addOnsDirectories) {
8
- for (const dir of readdirSync(addOnsBase).filter((file) => isDirectory(resolve(addOnsBase, file)))) {
9
- const filePath = resolve(addOnsBase, dir, 'info.json');
10
- const fileContent = readFileSync(filePath, 'utf-8');
11
- const info = JSON.parse(fileContent);
12
- let packageAdditions = {};
13
- if (existsSync(resolve(addOnsBase, dir, 'package.json'))) {
14
- packageAdditions = JSON.parse(readFileSync(resolve(addOnsBase, dir, 'package.json'), 'utf-8'));
15
- }
16
- let readme;
17
- if (existsSync(resolve(addOnsBase, dir, 'README.md'))) {
18
- readme = readFileSync(resolve(addOnsBase, dir, 'README.md'), 'utf-8');
19
- }
20
- let smallLogo;
21
- if (existsSync(resolve(addOnsBase, dir, 'small-logo.svg'))) {
22
- smallLogo = readFileSync(resolve(addOnsBase, dir, 'small-logo.svg'), 'utf-8');
23
- }
24
- const absoluteFiles = {};
25
- const assetsDir = resolve(addOnsBase, dir, 'assets');
26
- if (existsSync(assetsDir)) {
27
- findFilesRecursively(assetsDir, absoluteFiles);
28
- }
29
- const files = {};
30
- for (const file of Object.keys(absoluteFiles)) {
31
- files[file.replace(assetsDir, '.')] = readFileHelper(file);
32
- }
33
- const getFiles = () => {
34
- return Promise.resolve(Object.keys(files));
35
- };
36
- const getFileContents = (path) => {
37
- return Promise.resolve(files[path]);
38
- };
39
- addOns.push({
40
- ...info,
41
- id: dir,
42
- packageAdditions,
43
- readme,
44
- files,
45
- smallLogo,
46
- getFiles,
47
- getFileContents,
48
- getDeletedFiles: () => Promise.resolve(info.deletedFiles ?? []),
49
- });
50
- }
51
- }
52
- return addOns;
53
- }
54
- export function __testRegisterFramework(framework) {
55
- frameworks.push(framework);
56
- }
57
- export function __testClearFrameworks() {
58
- frameworks.length = 0;
59
- }
60
- export function registerFramework(framework) {
61
- const baseAssetsDirectory = resolve(framework.baseDirectory, 'base');
62
- const basePackageJSON = JSON.parse(readFileSync(resolve(baseAssetsDirectory, 'package.json'), 'utf8'));
63
- const optionalPackages = JSON.parse(readFileSync(resolve(framework.baseDirectory, 'packages.json'), 'utf8'));
64
- const addOns = getAddOns(framework);
65
- const frameworkWithBundler = {
66
- ...framework,
67
- getFiles: () => {
68
- const files = {};
69
- findFilesRecursively(baseAssetsDirectory, files);
70
- return Promise.resolve(Object.keys(files).map((path) => path.replace(baseAssetsDirectory, '.')));
71
- },
72
- getFileContents: (path) => {
73
- return Promise.resolve(readFileHelper(resolve(baseAssetsDirectory, path)));
74
- },
75
- getDeletedFiles: () => {
76
- return Promise.resolve([]);
77
- },
78
- basePackageJSON,
79
- optionalPackages,
80
- getAddOns: () => addOns,
81
- };
82
- frameworks.push(frameworkWithBundler);
83
- }
84
- export function getFrameworkById(id) {
85
- return frameworks.find((framework) => framework.id === id);
86
- }
87
- export function getFrameworkByName(name) {
88
- return frameworks.find((framework) => framework.name === name);
89
- }
90
- export function getFrameworks() {
91
- return frameworks;
92
- }
@@ -1,4 +0,0 @@
1
- import { resolve } from 'node:path';
2
- export async function setupGit(environment, targetDir) {
3
- await environment.execute('git', ['init'], resolve(targetDir));
4
- }
@@ -1,33 +0,0 @@
1
- import { resolve } from 'node:path';
2
- import { packageManagerExecute } from '../package-manager.js';
3
- export async function installShadcnComponents(environment, targetDir, options) {
4
- const s = environment.spinner();
5
- if (options.chosenAddOns.find((a) => a.id === 'shadcn')) {
6
- const shadcnComponents = new Set();
7
- for (const addOn of options.chosenAddOns) {
8
- if (addOn.shadcnComponents) {
9
- for (const component of addOn.shadcnComponents) {
10
- shadcnComponents.add(component);
11
- }
12
- }
13
- }
14
- if (options.starter) {
15
- if (options.starter.shadcnComponents) {
16
- for (const component of options.starter.shadcnComponents) {
17
- shadcnComponents.add(component);
18
- }
19
- }
20
- }
21
- if (shadcnComponents.size > 0) {
22
- s.start(`Installing shadcn components (${Array.from(shadcnComponents).join(', ')})...`);
23
- environment.startStep({
24
- id: 'install-shadcn-components',
25
- type: 'command',
26
- message: `Installing shadcn components (${Array.from(shadcnComponents).join(', ')})...`,
27
- });
28
- await packageManagerExecute(environment, resolve(targetDir), options.packageManager, 'shadcn@latest', ['add', '--silent', '--yes', ...Array.from(shadcnComponents)]);
29
- environment.finishStep('install-shadcn-components', 'Shadcn components installed');
30
- s.stop(`Installed additional shadcn components`);
31
- }
32
- }
33
- }
@@ -1,48 +0,0 @@
1
- import { FILE_ROUTER } from './constants.js';
2
- import { sortObject } from './utils.js';
3
- export function mergePackageJSON(packageJSON, overlayPackageJSON) {
4
- return {
5
- ...packageJSON,
6
- dependencies: {
7
- ...packageJSON.dependencies,
8
- ...(overlayPackageJSON?.dependencies || {}),
9
- },
10
- devDependencies: {
11
- ...packageJSON.devDependencies,
12
- ...(overlayPackageJSON?.devDependencies || {}),
13
- },
14
- scripts: {
15
- ...packageJSON.scripts,
16
- ...(overlayPackageJSON?.scripts || {}),
17
- },
18
- };
19
- }
20
- export function createPackageJSON(options) {
21
- let packageJSON = {
22
- ...JSON.parse(JSON.stringify(options.framework.basePackageJSON)),
23
- name: options.projectName,
24
- };
25
- const additions = [
26
- options.typescript
27
- ? options.framework.optionalPackages.typescript
28
- : undefined,
29
- options.tailwind
30
- ? options.framework.optionalPackages.tailwindcss
31
- : undefined,
32
- options.mode === FILE_ROUTER
33
- ? options.framework.optionalPackages['file-router']
34
- : undefined,
35
- ];
36
- for (const addition of additions.filter(Boolean)) {
37
- packageJSON = mergePackageJSON(packageJSON, addition);
38
- }
39
- for (const addOn of options.chosenAddOns.map((addOn) => addOn.packageAdditions)) {
40
- packageJSON = mergePackageJSON(packageJSON, addOn);
41
- }
42
- if (options.starter) {
43
- packageJSON = mergePackageJSON(packageJSON, options.starter.packageAdditions);
44
- }
45
- packageJSON.dependencies = sortObject((packageJSON.dependencies ?? {}));
46
- packageJSON.devDependencies = sortObject((packageJSON.devDependencies ?? {}));
47
- return packageJSON;
48
- }
@@ -1,24 +0,0 @@
1
- import { rimrafNodeModules } from './rimraf-node-modules.js';
2
- const specialStepsLookup = {
3
- 'rimraf-node-modules': rimrafNodeModules,
4
- };
5
- export async function runSpecialSteps(environment, options, specialSteps) {
6
- if (specialSteps.length) {
7
- environment.startStep({
8
- id: 'special-steps',
9
- type: 'command',
10
- message: 'Removing node_modules...',
11
- });
12
- for (const step of specialSteps) {
13
- const stepFunction = specialStepsLookup[step];
14
- /* eslint-disable @typescript-eslint/no-unnecessary-condition */
15
- if (stepFunction) {
16
- await stepFunction(environment, options);
17
- }
18
- else {
19
- environment.error(`Special step ${step} not found`);
20
- }
21
- }
22
- environment.finishStep('special-steps', 'Special steps complete');
23
- }
24
- }
@@ -1,16 +0,0 @@
1
- import { resolve } from 'node:path';
2
- const lockFiles = ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml'];
3
- export async function rimrafNodeModules(environment, options) {
4
- environment.startStep({
5
- id: 'special-steps',
6
- type: 'command',
7
- message: 'Removing node_modules...',
8
- });
9
- await environment.rimraf(resolve(options.targetDir, 'node_modules'));
10
- for (const lockFile of lockFiles) {
11
- const lockFilePath = resolve(options.targetDir, lockFile);
12
- if (environment.exists(lockFilePath)) {
13
- await environment.deleteFile(lockFilePath);
14
- }
15
- }
16
- }
@@ -1,112 +0,0 @@
1
- import { resolve } from 'node:path';
2
- import { render } from 'ejs';
3
- import { format } from 'prettier';
4
- import { CODE_ROUTER, FILE_ROUTER } from './constants.js';
5
- import { formatCommand } from './utils.js';
6
- import { getPackageManagerInstallCommand, getPackageManagerScriptCommand, } from './package-manager.js';
7
- import { relativePath } from './file-helpers.js';
8
- function convertDotFilesAndPaths(path) {
9
- return path
10
- .split('/')
11
- .map((segment) => segment.replace(/^_dot_/, '.'))
12
- .join('/');
13
- }
14
- export function createTemplateFile(environment, options) {
15
- function getPackageManagerAddScript(packageName, isDev = false) {
16
- return formatCommand(getPackageManagerInstallCommand(options.packageManager, packageName, isDev));
17
- }
18
- function getPackageManagerRunScript(scriptName, args = []) {
19
- return formatCommand(getPackageManagerScriptCommand(options.packageManager, [
20
- scriptName,
21
- ...args,
22
- ]));
23
- }
24
- class IgnoreFileError extends Error {
25
- constructor() {
26
- super('ignoreFile');
27
- this.name = 'IgnoreFileError';
28
- }
29
- }
30
- const integrations = [];
31
- for (const addOn of options.chosenAddOns) {
32
- if (addOn.integrations) {
33
- for (const integration of addOn.integrations) {
34
- integrations.push(integration);
35
- }
36
- }
37
- }
38
- const routes = [];
39
- for (const addOn of options.chosenAddOns) {
40
- if (addOn.routes) {
41
- routes.push(...addOn.routes);
42
- }
43
- }
44
- const addOnEnabled = options.chosenAddOns.reduce((acc, addOn) => {
45
- acc[addOn.id] = true;
46
- return acc;
47
- }, {});
48
- return async function templateFile(file, content) {
49
- const templateValues = {
50
- packageManager: options.packageManager,
51
- projectName: options.projectName,
52
- typescript: options.typescript,
53
- tailwind: options.tailwind,
54
- js: options.typescript ? 'ts' : 'js',
55
- jsx: options.typescript ? 'tsx' : 'jsx',
56
- fileRouter: options.mode === FILE_ROUTER,
57
- codeRouter: options.mode === CODE_ROUTER,
58
- addOnEnabled,
59
- addOns: options.chosenAddOns,
60
- integrations,
61
- routes,
62
- getPackageManagerAddScript,
63
- getPackageManagerRunScript,
64
- relativePath: (path) => relativePath(file, path),
65
- ignoreFile: () => {
66
- throw new IgnoreFileError();
67
- },
68
- };
69
- let ignoreFile = false;
70
- if (file.endsWith('.ejs')) {
71
- try {
72
- content = render(content, templateValues);
73
- }
74
- catch (error) {
75
- if (error instanceof IgnoreFileError) {
76
- ignoreFile = true;
77
- }
78
- else {
79
- console.error(file, error);
80
- environment.error(`EJS error in file ${file}`, error?.toString());
81
- process.exit(1);
82
- }
83
- }
84
- }
85
- if (ignoreFile) {
86
- return;
87
- }
88
- let target = convertDotFilesAndPaths(file.replace('.ejs', ''));
89
- let append = false;
90
- if (target.endsWith('.append')) {
91
- append = true;
92
- target = target.replace('.append', '');
93
- }
94
- if (target.endsWith('.ts') || target.endsWith('.tsx')) {
95
- content = await format(content, {
96
- semi: false,
97
- singleQuote: true,
98
- trailingComma: 'all',
99
- parser: 'typescript',
100
- });
101
- }
102
- if (!options.typescript) {
103
- target = target.replace(/\.tsx$/, '.jsx').replace(/\.ts$/, '.js');
104
- }
105
- if (append) {
106
- await environment.appendFile(resolve(options.targetDir, target), content);
107
- }
108
- else {
109
- await environment.writeFile(resolve(options.targetDir, target), content);
110
- }
111
- };
112
- }
@@ -1,17 +0,0 @@
1
- import type { Environment } from './types.js';
2
- import type { PersistedOptions } from './config-file.js';
3
- export declare function hasPendingGitChanges(environment: Environment, cwd: string): Promise<boolean>;
4
- export declare function getCurrentConfiguration(environment: Environment, cwd: string): Promise<PersistedOptions | undefined>;
5
- export declare function writeFiles(environment: Environment, cwd: string, output: {
6
- files: Record<string, string>;
7
- deletedFiles: Array<string>;
8
- }, forced: boolean): Promise<void>;
9
- export declare function runNewCommands(environment: Environment, originalOptions: PersistedOptions, cwd: string, output: {
10
- commands: Array<{
11
- command: string;
12
- args: Array<string>;
13
- }>;
14
- }): Promise<void>;
15
- export declare function addToApp(environment: Environment, addOns: Array<string>, cwd: string, options?: {
16
- forced?: boolean;
17
- }): Promise<void>;
@@ -1,69 +0,0 @@
1
- import type { PersistedOptions } from '../config-file';
2
- import type { AddOn, AddOnInfo, Environment } from '../types';
3
- export declare const ADD_ON_IGNORE_FILES: Array<string>;
4
- export declare function camelCase(str: string): string;
5
- export declare function templatize(routeCode: string, routeFile: string): {
6
- url: string;
7
- code: string;
8
- name: string;
9
- jsName: string;
10
- };
11
- export declare function validateAddOnSetup(environment: Environment): Promise<void>;
12
- export declare function readOrGenerateAddOnInfo(options: PersistedOptions): Promise<AddOnInfo>;
13
- export declare function generateProject(persistedOptions: PersistedOptions): Promise<{
14
- info: {
15
- id: string;
16
- name: string;
17
- description: string;
18
- type: "add-on" | "example" | "starter" | "toolchain";
19
- modes: string[];
20
- phase: "add-on" | "setup";
21
- command?: {
22
- command: string;
23
- args?: string[] | undefined;
24
- } | undefined;
25
- author?: string | undefined;
26
- version?: string | undefined;
27
- link?: string | undefined;
28
- license?: string | undefined;
29
- warning?: string | undefined;
30
- routes?: {
31
- path: string;
32
- jsName: string;
33
- name?: string | undefined;
34
- url?: string | undefined;
35
- }[] | undefined;
36
- packageAdditions?: {
37
- dependencies?: Record<string, string> | undefined;
38
- devDependencies?: Record<string, string> | undefined;
39
- scripts?: Record<string, string> | undefined;
40
- } | undefined;
41
- shadcnComponents?: string[] | undefined;
42
- dependsOn?: string[] | undefined;
43
- smallLogo?: string | undefined;
44
- logo?: string | undefined;
45
- addOnSpecialSteps?: string[] | undefined;
46
- createSpecialSteps?: string[] | undefined;
47
- integrations?: {
48
- type: string;
49
- path: string;
50
- jsName: string;
51
- }[] | undefined;
52
- readme?: string | undefined;
53
- };
54
- output: {
55
- files: Record<string, string>;
56
- deletedFiles: Array<string>;
57
- commands: Array<{
58
- command: string;
59
- args: Array<string>;
60
- }>;
61
- };
62
- }>;
63
- export declare function buildAssetsDirectory(output: {
64
- files: Record<string, string>;
65
- }, info: AddOnInfo): Promise<void>;
66
- export declare function updateAddOnInfo(environment: Environment): Promise<void>;
67
- export declare function compileAddOn(environment: Environment): Promise<void>;
68
- export declare function initAddOn(environment: Environment): Promise<void>;
69
- export declare function loadRemoteAddOn(url: string): Promise<AddOn>;
@@ -1,15 +0,0 @@
1
- import type { Environment, Options, SerializedOptions } from '../types.js';
2
- import type { PersistedOptions } from '../config-file.js';
3
- export declare function createPackageAdditions(originalPackageJson: Record<string, any>, currentPackageJson: Record<string, any>): Record<string, any>;
4
- export declare function createAppOptionsFromPersisted(json: PersistedOptions): Promise<Options>;
5
- export declare function createSerializedOptionsFromPersisted(json: PersistedOptions): SerializedOptions;
6
- export declare function runCreateApp(options: Required<Options>): Promise<{
7
- files: Record<string, string>;
8
- deletedFiles: Array<string>;
9
- commands: Array<{
10
- command: string;
11
- args: Array<string>;
12
- }>;
13
- }>;
14
- export declare function compareFilesRecursively(path: string, ignore: (filePath: string) => boolean, original: Record<string, string>, changedFiles: Record<string, string>): Promise<void>;
15
- export declare function readCurrentProjectOptions(environment: Environment): Promise<PersistedOptions>;
@@ -1,7 +0,0 @@
1
- import type { PersistedOptions } from '../config-file';
2
- import type { Environment, Starter, StarterInfo } from '../types';
3
- export declare function readOrGenerateStarterInfo(options: PersistedOptions): Promise<StarterInfo>;
4
- export declare function updateStarterInfo(environment: Environment): Promise<void>;
5
- export declare function compileStarter(environment: Environment): Promise<void>;
6
- export declare function initStarter(environment: Environment): Promise<void>;
7
- export declare function loadStarter(url: string): Promise<Starter>;
@@ -1,15 +0,0 @@
1
- import type { Environment } from './types';
2
- export declare function readFileHelper(path: string): string;
3
- export declare function isBinaryFile(path: string): boolean;
4
- export declare function convertBinaryContentsToBase64(contents: any): string;
5
- export declare function isBase64(content: string): boolean;
6
- export declare function getBinaryFile(content: string): string | null;
7
- export declare function relativePath(from: string, to: string): string;
8
- export declare function isDirectory(path: string): boolean;
9
- export declare function findFilesRecursively(path: string, files: Record<string, string>): void;
10
- export declare function recursivelyGatherFiles(path: string, includeProjectFiles?: boolean): Promise<Record<string, string>>;
11
- export declare function recursivelyGatherFilesFromEnvironment(environment: Environment, path: string, includeProjectFiles?: boolean): Promise<Record<string, string>>;
12
- export declare const IGNORE_FILES: string[];
13
- export declare function createIgnore(path: string, includeProjectFiles?: boolean): (filePath: string) => boolean;
14
- export declare function cleanUpFiles(files: Record<string, string>, targetDir?: string): Record<string, string>;
15
- export declare function cleanUpFileArray(files: Array<string>, targetDir?: string): string[];
@@ -1,7 +0,0 @@
1
- import type { Framework, FrameworkDefinition } from './types.js';
2
- export declare function __testRegisterFramework(framework: Framework): void;
3
- export declare function __testClearFrameworks(): void;
4
- export declare function registerFramework(framework: FrameworkDefinition): void;
5
- export declare function getFrameworkById(id: string): Framework | undefined;
6
- export declare function getFrameworkByName(name: string): Framework | undefined;
7
- export declare function getFrameworks(): Framework[];
@@ -1,2 +0,0 @@
1
- import type { Environment } from '../types.js';
2
- export declare function setupGit(environment: Environment, targetDir: string): Promise<void>;
@@ -1,2 +0,0 @@
1
- import type { Environment, Options } from '../types.js';
2
- export declare function installShadcnComponents(environment: Environment, targetDir: string, options: Options): Promise<void>;
@@ -1,7 +0,0 @@
1
- import type { Options } from './types.js';
2
- export declare function mergePackageJSON(packageJSON: Record<string, any>, overlayPackageJSON?: Record<string, any>): {
3
- dependencies: any;
4
- devDependencies: any;
5
- scripts: any;
6
- };
7
- export declare function createPackageJSON(options: Options): any;
@@ -1,2 +0,0 @@
1
- import type { Environment, Options } from '../types.js';
2
- export declare function runSpecialSteps(environment: Environment, options: Options, specialSteps: Array<string>): Promise<void>;
@@ -1,2 +0,0 @@
1
- import type { Environment, Options } from '../types.js';
2
- export declare function rimrafNodeModules(environment: Environment, options: Options): Promise<void>;
@@ -1,2 +0,0 @@
1
- import type { Environment, Options } from './types.js';
2
- export declare function createTemplateFile(environment: Environment, options: Options): (file: string, content: string) => Promise<void>;