alchemy 0.62.3 → 0.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/bin/alchemy.js +1516 -1202
  2. package/bin/commands/deploy.ts +2 -0
  3. package/bin/commands/dev.ts +2 -0
  4. package/bin/services/execute-alchemy.ts +11 -0
  5. package/bin/services/template-manager.ts +2 -0
  6. package/bin/types.ts +2 -1
  7. package/lib/alchemy.d.ts +6 -22
  8. package/lib/alchemy.d.ts.map +1 -1
  9. package/lib/alchemy.js +65 -169
  10. package/lib/alchemy.js.map +1 -1
  11. package/lib/apply.d.ts +0 -2
  12. package/lib/apply.d.ts.map +1 -1
  13. package/lib/apply.js +2 -16
  14. package/lib/apply.js.map +1 -1
  15. package/lib/aws/account-id.d.ts.map +1 -1
  16. package/lib/aws/account-id.js +3 -2
  17. package/lib/aws/account-id.js.map +1 -1
  18. package/lib/aws/bucket.d.ts +8 -2
  19. package/lib/aws/bucket.d.ts.map +1 -1
  20. package/lib/aws/bucket.js +21 -14
  21. package/lib/aws/bucket.js.map +1 -1
  22. package/lib/aws/ec2/security-group.d.ts +8 -2
  23. package/lib/aws/ec2/security-group.d.ts.map +1 -1
  24. package/lib/aws/ec2/security-group.js +7 -2
  25. package/lib/aws/ec2/security-group.js.map +1 -1
  26. package/lib/aws/function.d.ts +9 -3
  27. package/lib/aws/function.d.ts.map +1 -1
  28. package/lib/aws/function.js +35 -26
  29. package/lib/aws/function.js.map +1 -1
  30. package/lib/aws/policy-attachment.d.ts.map +1 -1
  31. package/lib/aws/policy-attachment.js +2 -1
  32. package/lib/aws/policy-attachment.js.map +1 -1
  33. package/lib/aws/policy.d.ts +8 -2
  34. package/lib/aws/policy.d.ts.map +1 -1
  35. package/lib/aws/policy.js +13 -4
  36. package/lib/aws/policy.js.map +1 -1
  37. package/lib/aws/queue.d.ts +8 -2
  38. package/lib/aws/queue.d.ts.map +1 -1
  39. package/lib/aws/queue.js +22 -14
  40. package/lib/aws/queue.js.map +1 -1
  41. package/lib/aws/role.d.ts +8 -2
  42. package/lib/aws/role.d.ts.map +1 -1
  43. package/lib/aws/role.js +10 -3
  44. package/lib/aws/role.js.map +1 -1
  45. package/lib/aws/ses.d.ts +1 -1
  46. package/lib/aws/ses.d.ts.map +1 -1
  47. package/lib/aws/ses.js +2 -1
  48. package/lib/aws/ses.js.map +1 -1
  49. package/lib/aws/ssm-parameter.d.ts +8 -2
  50. package/lib/aws/ssm-parameter.d.ts.map +1 -1
  51. package/lib/aws/ssm-parameter.js +15 -10
  52. package/lib/aws/ssm-parameter.js.map +1 -1
  53. package/lib/aws/table.d.ts +8 -2
  54. package/lib/aws/table.d.ts.map +1 -1
  55. package/lib/aws/table.js +17 -9
  56. package/lib/aws/table.js.map +1 -1
  57. package/lib/cloudflare/account-api-token.d.ts +2 -2
  58. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  59. package/lib/cloudflare/account-api-token.js +7 -6
  60. package/lib/cloudflare/account-api-token.js.map +1 -1
  61. package/lib/cloudflare/ai-gateway.d.ts +9 -4
  62. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  63. package/lib/cloudflare/ai-gateway.js +20 -24
  64. package/lib/cloudflare/ai-gateway.js.map +1 -1
  65. package/lib/cloudflare/api-schema.d.ts +2 -2
  66. package/lib/cloudflare/api-schema.d.ts.map +1 -1
  67. package/lib/cloudflare/api-schema.js +6 -2
  68. package/lib/cloudflare/api-schema.js.map +1 -1
  69. package/lib/cloudflare/api-shield.d.ts +5 -1
  70. package/lib/cloudflare/api-shield.d.ts.map +1 -1
  71. package/lib/cloudflare/api-shield.js +6 -1
  72. package/lib/cloudflare/api-shield.js.map +1 -1
  73. package/lib/cloudflare/assets.d.ts +1 -1
  74. package/lib/cloudflare/assets.d.ts.map +1 -1
  75. package/lib/cloudflare/astro/astro.d.ts.map +1 -1
  76. package/lib/cloudflare/astro/astro.js +3 -1
  77. package/lib/cloudflare/astro/astro.js.map +1 -1
  78. package/lib/cloudflare/astro/plugin.d.ts +2 -1
  79. package/lib/cloudflare/astro/plugin.d.ts.map +1 -1
  80. package/lib/cloudflare/astro/plugin.js.map +1 -1
  81. package/lib/cloudflare/bindings.d.ts +2 -2
  82. package/lib/cloudflare/bindings.d.ts.map +1 -1
  83. package/lib/cloudflare/bound.d.ts +1 -1
  84. package/lib/cloudflare/bound.d.ts.map +1 -1
  85. package/lib/cloudflare/bucket.d.ts +120 -1
  86. package/lib/cloudflare/bucket.d.ts.map +1 -1
  87. package/lib/cloudflare/bucket.js +80 -2
  88. package/lib/cloudflare/bucket.js.map +1 -1
  89. package/lib/cloudflare/compatibility-date.gen.d.ts +1 -1
  90. package/lib/cloudflare/compatibility-date.gen.js +1 -1
  91. package/lib/cloudflare/container.d.ts +10 -4
  92. package/lib/cloudflare/container.d.ts.map +1 -1
  93. package/lib/cloudflare/container.js +12 -9
  94. package/lib/cloudflare/container.js.map +1 -1
  95. package/lib/cloudflare/custom-domain.js +2 -1
  96. package/lib/cloudflare/custom-domain.js.map +1 -1
  97. package/lib/cloudflare/d1-database.d.ts +1 -1
  98. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  99. package/lib/cloudflare/d1-database.js +6 -2
  100. package/lib/cloudflare/d1-database.js.map +1 -1
  101. package/lib/cloudflare/dispatch-namespace.d.ts +2 -0
  102. package/lib/cloudflare/dispatch-namespace.d.ts.map +1 -1
  103. package/lib/cloudflare/dispatch-namespace.js +7 -5
  104. package/lib/cloudflare/dispatch-namespace.js.map +1 -1
  105. package/lib/cloudflare/hyperdrive.d.ts +7 -1
  106. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  107. package/lib/cloudflare/hyperdrive.js +2 -1
  108. package/lib/cloudflare/hyperdrive.js.map +1 -1
  109. package/lib/cloudflare/kv-namespace.d.ts +3 -0
  110. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  111. package/lib/cloudflare/kv-namespace.js +11 -2
  112. package/lib/cloudflare/kv-namespace.js.map +1 -1
  113. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js +3 -1
  114. package/lib/cloudflare/miniflare/miniflare-worker-proxy.js.map +1 -1
  115. package/lib/cloudflare/miniflare/paths.d.ts +4 -0
  116. package/lib/cloudflare/miniflare/paths.d.ts.map +1 -1
  117. package/lib/cloudflare/miniflare/paths.js +11 -0
  118. package/lib/cloudflare/miniflare/paths.js.map +1 -1
  119. package/lib/cloudflare/pipeline.d.ts +14 -3
  120. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  121. package/lib/cloudflare/pipeline.js +31 -2
  122. package/lib/cloudflare/pipeline.js.map +1 -1
  123. package/lib/cloudflare/queue-consumer.js +1 -1
  124. package/lib/cloudflare/queue-consumer.js.map +1 -1
  125. package/lib/cloudflare/queue.d.ts +4 -2
  126. package/lib/cloudflare/queue.d.ts.map +1 -1
  127. package/lib/cloudflare/queue.js +13 -9
  128. package/lib/cloudflare/queue.js.map +1 -1
  129. package/lib/cloudflare/react-router/plugin.d.ts +1 -1
  130. package/lib/cloudflare/react-router/plugin.d.ts.map +1 -1
  131. package/lib/cloudflare/react-router/react-router.d.ts.map +1 -1
  132. package/lib/cloudflare/react-router/react-router.js +32 -2
  133. package/lib/cloudflare/react-router/react-router.js.map +1 -1
  134. package/lib/cloudflare/redwood/plugin.d.ts +2 -1
  135. package/lib/cloudflare/redwood/plugin.d.ts.map +1 -1
  136. package/lib/cloudflare/redwood/plugin.js.map +1 -1
  137. package/lib/cloudflare/route.js +1 -1
  138. package/lib/cloudflare/route.js.map +1 -1
  139. package/lib/cloudflare/ruleset.d.ts +3 -1
  140. package/lib/cloudflare/ruleset.d.ts.map +1 -1
  141. package/lib/cloudflare/ruleset.js +3 -2
  142. package/lib/cloudflare/ruleset.js.map +1 -1
  143. package/lib/cloudflare/secret.d.ts +6 -23
  144. package/lib/cloudflare/secret.d.ts.map +1 -1
  145. package/lib/cloudflare/secret.js +8 -4
  146. package/lib/cloudflare/secret.js.map +1 -1
  147. package/lib/cloudflare/secrets-store.d.ts +1 -1
  148. package/lib/cloudflare/secrets-store.d.ts.map +1 -1
  149. package/lib/cloudflare/secrets-store.js +5 -2
  150. package/lib/cloudflare/secrets-store.js.map +1 -1
  151. package/lib/cloudflare/tunnel.d.ts +5 -1
  152. package/lib/cloudflare/tunnel.d.ts.map +1 -1
  153. package/lib/cloudflare/tunnel.js +5 -1
  154. package/lib/cloudflare/tunnel.js.map +1 -1
  155. package/lib/cloudflare/vectorize-index.d.ts +7 -1
  156. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  157. package/lib/cloudflare/vectorize-index.js +5 -2
  158. package/lib/cloudflare/vectorize-index.js.map +1 -1
  159. package/lib/cloudflare/vite/plugin.d.ts +2 -1
  160. package/lib/cloudflare/vite/plugin.d.ts.map +1 -1
  161. package/lib/cloudflare/vite/plugin.js.map +1 -1
  162. package/lib/cloudflare/website.js +1 -1
  163. package/lib/cloudflare/website.js.map +1 -1
  164. package/lib/cloudflare/worker.d.ts +1 -1
  165. package/lib/cloudflare/worker.d.ts.map +1 -1
  166. package/lib/cloudflare/worker.js +12 -7
  167. package/lib/cloudflare/worker.js.map +1 -1
  168. package/lib/cloudflare/wrangler.json.d.ts +1 -1
  169. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  170. package/lib/cloudflare/wrangler.json.js +5 -3
  171. package/lib/cloudflare/wrangler.json.js.map +1 -1
  172. package/lib/docker/container.d.ts +6 -0
  173. package/lib/docker/container.d.ts.map +1 -1
  174. package/lib/docker/container.js +5 -1
  175. package/lib/docker/container.js.map +1 -1
  176. package/lib/docker/network.d.ts +8 -2
  177. package/lib/docker/network.d.ts.map +1 -1
  178. package/lib/docker/network.js +7 -2
  179. package/lib/docker/network.js.map +1 -1
  180. package/lib/docker/volume.d.ts +8 -2
  181. package/lib/docker/volume.d.ts.map +1 -1
  182. package/lib/docker/volume.js +6 -4
  183. package/lib/docker/volume.js.map +1 -1
  184. package/lib/esbuild/bundle.d.ts +1 -1
  185. package/lib/fs/index.d.ts +0 -8
  186. package/lib/fs/index.d.ts.map +1 -1
  187. package/lib/fs/index.js +0 -8
  188. package/lib/fs/index.js.map +1 -1
  189. package/lib/github/client.d.ts +1 -1
  190. package/lib/github/client.d.ts.map +1 -1
  191. package/lib/github/client.js +2 -1
  192. package/lib/github/client.js.map +1 -1
  193. package/lib/github/repository-environment.d.ts +8 -2
  194. package/lib/github/repository-environment.d.ts.map +1 -1
  195. package/lib/github/repository-environment.js +16 -12
  196. package/lib/github/repository-environment.js.map +1 -1
  197. package/lib/neon/project.d.ts +7 -1
  198. package/lib/neon/project.d.ts.map +1 -1
  199. package/lib/neon/project.js +10 -6
  200. package/lib/neon/project.js.map +1 -1
  201. package/lib/planetscale/branch.d.ts +4 -2
  202. package/lib/planetscale/branch.d.ts.map +1 -1
  203. package/lib/planetscale/branch.js +18 -12
  204. package/lib/planetscale/branch.js.map +1 -1
  205. package/lib/planetscale/database.d.ts +8 -2
  206. package/lib/planetscale/database.d.ts.map +1 -1
  207. package/lib/planetscale/database.js +24 -16
  208. package/lib/planetscale/database.js.map +1 -1
  209. package/lib/planetscale/password.d.ts +8 -2
  210. package/lib/planetscale/password.d.ts.map +1 -1
  211. package/lib/planetscale/password.js +2 -2
  212. package/lib/planetscale/password.js.map +1 -1
  213. package/lib/resource.d.ts +0 -2
  214. package/lib/resource.d.ts.map +1 -1
  215. package/lib/resource.js +1 -9
  216. package/lib/resource.js.map +1 -1
  217. package/lib/scope.d.ts +9 -3
  218. package/lib/scope.d.ts.map +1 -1
  219. package/lib/scope.js +21 -34
  220. package/lib/scope.js.map +1 -1
  221. package/lib/sentry/client-key.d.ts +7 -1
  222. package/lib/sentry/client-key.d.ts.map +1 -1
  223. package/lib/sentry/client-key.js +45 -6
  224. package/lib/sentry/client-key.js.map +1 -1
  225. package/lib/sentry/project.d.ts +8 -2
  226. package/lib/sentry/project.d.ts.map +1 -1
  227. package/lib/sentry/project.js +35 -5
  228. package/lib/sentry/project.js.map +1 -1
  229. package/lib/sentry/team.d.ts +8 -2
  230. package/lib/sentry/team.d.ts.map +1 -1
  231. package/lib/sentry/team.js +36 -6
  232. package/lib/sentry/team.js.map +1 -1
  233. package/lib/serde.d.ts +0 -5
  234. package/lib/serde.d.ts.map +1 -1
  235. package/lib/serde.js +0 -28
  236. package/lib/serde.js.map +1 -1
  237. package/lib/state/d1-state-store.d.ts +1 -1
  238. package/lib/state/d1-state-store.d.ts.map +1 -1
  239. package/lib/state/d1-state-store.js +5 -5
  240. package/lib/state/d1-state-store.js.map +1 -1
  241. package/lib/state/sqlite-state-store.d.ts.map +1 -1
  242. package/lib/state/sqlite-state-store.js +7 -11
  243. package/lib/state/sqlite-state-store.js.map +1 -1
  244. package/lib/stripe/card.d.ts.map +1 -1
  245. package/lib/stripe/card.js +3 -2
  246. package/lib/stripe/card.js.map +1 -1
  247. package/lib/stripe/client.d.ts +2 -2
  248. package/lib/stripe/client.d.ts.map +1 -1
  249. package/lib/stripe/client.js +4 -3
  250. package/lib/stripe/client.js.map +1 -1
  251. package/lib/stripe/coupon.d.ts.map +1 -1
  252. package/lib/stripe/coupon.js +4 -3
  253. package/lib/stripe/coupon.js.map +1 -1
  254. package/lib/stripe/customer.js +2 -2
  255. package/lib/stripe/customer.js.map +1 -1
  256. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  257. package/lib/stripe/entitlements-feature.js +3 -2
  258. package/lib/stripe/entitlements-feature.js.map +1 -1
  259. package/lib/stripe/file.d.ts.map +1 -1
  260. package/lib/stripe/file.js +3 -2
  261. package/lib/stripe/file.js.map +1 -1
  262. package/lib/stripe/meter.js +2 -2
  263. package/lib/stripe/meter.js.map +1 -1
  264. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  265. package/lib/stripe/portal-configuration.js +3 -2
  266. package/lib/stripe/portal-configuration.js.map +1 -1
  267. package/lib/stripe/price.d.ts.map +1 -1
  268. package/lib/stripe/price.js +3 -2
  269. package/lib/stripe/price.js.map +1 -1
  270. package/lib/stripe/product-feature.d.ts.map +1 -1
  271. package/lib/stripe/product-feature.js +3 -2
  272. package/lib/stripe/product-feature.js.map +1 -1
  273. package/lib/stripe/product.d.ts.map +1 -1
  274. package/lib/stripe/product.js +3 -2
  275. package/lib/stripe/product.js.map +1 -1
  276. package/lib/stripe/promotion-code.d.ts.map +1 -1
  277. package/lib/stripe/promotion-code.js +3 -2
  278. package/lib/stripe/promotion-code.js.map +1 -1
  279. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  280. package/lib/stripe/shipping-rate.js +4 -3
  281. package/lib/stripe/shipping-rate.js.map +1 -1
  282. package/lib/stripe/tax-rate.d.ts.map +1 -1
  283. package/lib/stripe/tax-rate.js +3 -2
  284. package/lib/stripe/tax-rate.js.map +1 -1
  285. package/lib/stripe/webhook.d.ts.map +1 -1
  286. package/lib/stripe/webhook.js +4 -3
  287. package/lib/stripe/webhook.js.map +1 -1
  288. package/lib/test/vitest.d.ts.map +1 -1
  289. package/lib/test/vitest.js +1 -0
  290. package/lib/test/vitest.js.map +1 -1
  291. package/lib/upstash/redis.d.ts +8 -2
  292. package/lib/upstash/redis.d.ts.map +1 -1
  293. package/lib/upstash/redis.js +5 -4
  294. package/lib/upstash/redis.js.map +1 -1
  295. package/lib/util/ignore-matcher.d.ts.map +1 -1
  296. package/lib/util/ignore-matcher.js +3 -1
  297. package/lib/util/ignore-matcher.js.map +1 -1
  298. package/lib/util/peer.d.ts +10 -0
  299. package/lib/util/peer.d.ts.map +1 -0
  300. package/lib/util/peer.js +42 -0
  301. package/lib/util/peer.js.map +1 -0
  302. package/lib/vercel/project.d.ts +7 -1
  303. package/lib/vercel/project.d.ts.map +1 -1
  304. package/lib/vercel/project.js +28 -0
  305. package/lib/vercel/project.js.map +1 -1
  306. package/package.json +88 -74
  307. package/src/alchemy.ts +76 -222
  308. package/src/apply.ts +6 -19
  309. package/src/aws/account-id.ts +6 -3
  310. package/src/aws/bucket.ts +43 -32
  311. package/src/aws/ec2/security-group.ts +15 -3
  312. package/src/aws/function.ts +65 -39
  313. package/src/aws/policy-attachment.ts +10 -6
  314. package/src/aws/policy.ts +33 -15
  315. package/src/aws/queue.ts +50 -29
  316. package/src/aws/role.ts +37 -20
  317. package/src/aws/ses.ts +24 -20
  318. package/src/aws/ssm-parameter.ts +40 -20
  319. package/src/aws/table.ts +35 -17
  320. package/src/cloudflare/account-api-token.ts +9 -7
  321. package/src/cloudflare/ai-gateway.ts +37 -34
  322. package/src/cloudflare/api-schema.ts +33 -26
  323. package/src/cloudflare/api-shield.ts +15 -2
  324. package/src/cloudflare/astro/astro.ts +5 -1
  325. package/src/cloudflare/astro/plugin.ts +2 -1
  326. package/src/cloudflare/bindings.ts +2 -2
  327. package/src/cloudflare/bound.ts +1 -1
  328. package/src/cloudflare/bucket.ts +242 -3
  329. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  330. package/src/cloudflare/container.ts +23 -12
  331. package/src/cloudflare/custom-domain.ts +2 -2
  332. package/src/cloudflare/d1-database.ts +10 -3
  333. package/src/cloudflare/dispatch-namespace.ts +10 -7
  334. package/src/cloudflare/hyperdrive.ts +13 -3
  335. package/src/cloudflare/kv-namespace.ts +25 -2
  336. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
  337. package/src/cloudflare/miniflare/paths.ts +13 -0
  338. package/src/cloudflare/pipeline.ts +76 -28
  339. package/src/cloudflare/queue-consumer.ts +1 -1
  340. package/src/cloudflare/queue.ts +26 -14
  341. package/src/cloudflare/react-router/react-router.ts +28 -2
  342. package/src/cloudflare/redwood/plugin.ts +3 -2
  343. package/src/cloudflare/route.ts +1 -1
  344. package/src/cloudflare/ruleset.ts +7 -2
  345. package/src/cloudflare/secret.ts +20 -31
  346. package/src/cloudflare/secrets-store.ts +7 -3
  347. package/src/cloudflare/tunnel.ts +13 -2
  348. package/src/cloudflare/vectorize-index.ts +14 -3
  349. package/src/cloudflare/vite/plugin.ts +3 -2
  350. package/src/cloudflare/website.ts +1 -1
  351. package/src/cloudflare/worker.ts +35 -23
  352. package/src/cloudflare/wrangler.json.ts +7 -4
  353. package/src/docker/container.ts +13 -1
  354. package/src/docker/network.ts +18 -3
  355. package/src/docker/volume.ts +17 -6
  356. package/src/fs/index.ts +0 -8
  357. package/src/github/client.ts +6 -2
  358. package/src/github/repository-environment.ts +27 -13
  359. package/src/neon/project.ts +20 -6
  360. package/src/planetscale/branch.ts +24 -13
  361. package/src/planetscale/database.ts +38 -17
  362. package/src/planetscale/password.ts +10 -3
  363. package/src/resource.ts +1 -10
  364. package/src/scope.ts +29 -38
  365. package/src/sentry/client-key.ts +74 -6
  366. package/src/sentry/project.ts +59 -6
  367. package/src/sentry/team.ts +55 -7
  368. package/src/serde.ts +0 -44
  369. package/src/state/d1-state-store.ts +13 -6
  370. package/src/state/sqlite-state-store.ts +16 -17
  371. package/src/stripe/card.ts +5 -2
  372. package/src/stripe/client.ts +10 -3
  373. package/src/stripe/coupon.ts +4 -3
  374. package/src/stripe/customer.ts +2 -2
  375. package/src/stripe/entitlements-feature.ts +5 -2
  376. package/src/stripe/file.ts +3 -2
  377. package/src/stripe/meter.ts +2 -2
  378. package/src/stripe/portal-configuration.ts +5 -2
  379. package/src/stripe/price.ts +3 -2
  380. package/src/stripe/product-feature.ts +5 -2
  381. package/src/stripe/product.ts +3 -2
  382. package/src/stripe/promotion-code.ts +3 -2
  383. package/src/stripe/shipping-rate.ts +4 -3
  384. package/src/stripe/tax-rate.ts +3 -2
  385. package/src/stripe/webhook.ts +4 -3
  386. package/src/test/vitest.ts +1 -0
  387. package/src/upstash/redis.ts +15 -5
  388. package/src/util/ignore-matcher.ts +3 -1
  389. package/src/util/peer.ts +53 -0
  390. package/src/vercel/project.ts +46 -1
  391. package/templates/hono/README.md +19 -0
  392. package/templates/hono/_env +1 -0
  393. package/templates/hono/_env.example +1 -0
  394. package/templates/hono/_gitignore +34 -0
  395. package/templates/hono/alchemy.run.ts +22 -0
  396. package/templates/hono/package.json +18 -0
  397. package/templates/hono/src/index.ts +17 -0
  398. package/templates/hono/tsconfig.json +13 -0
  399. package/templates/hono/types/env.d.ts +16 -0
  400. package/templates/react-router/vite.config.ts +5 -3
  401. package/workers/cloudflare-state-store.js +69 -74
  402. package/workers/dofs-state-store.js +1 -1
  403. package/bin/bootstrap-s3.ts +0 -255
  404. package/lib/ai/ark.d.ts +0 -12
  405. package/lib/ai/ark.d.ts.map +0 -1
  406. package/lib/ai/ark.js +0 -87
  407. package/lib/ai/ark.js.map +0 -1
  408. package/lib/ai/astro-file.d.ts +0 -138
  409. package/lib/ai/astro-file.d.ts.map +0 -1
  410. package/lib/ai/astro-file.js +0 -158
  411. package/lib/ai/astro-file.js.map +0 -1
  412. package/lib/ai/client.d.ts +0 -51
  413. package/lib/ai/client.d.ts.map +0 -1
  414. package/lib/ai/client.js +0 -58
  415. package/lib/ai/client.js.map +0 -1
  416. package/lib/ai/css-file.d.ts +0 -132
  417. package/lib/ai/css-file.d.ts.map +0 -1
  418. package/lib/ai/css-file.js +0 -142
  419. package/lib/ai/css-file.js.map +0 -1
  420. package/lib/ai/data.d.ts +0 -152
  421. package/lib/ai/data.d.ts.map +0 -1
  422. package/lib/ai/data.js +0 -120
  423. package/lib/ai/data.js.map +0 -1
  424. package/lib/ai/document.d.ts +0 -208
  425. package/lib/ai/document.d.ts.map +0 -1
  426. package/lib/ai/document.js +0 -206
  427. package/lib/ai/document.js.map +0 -1
  428. package/lib/ai/html-file.d.ts +0 -129
  429. package/lib/ai/html-file.d.ts.map +0 -1
  430. package/lib/ai/html-file.js +0 -139
  431. package/lib/ai/html-file.js.map +0 -1
  432. package/lib/ai/index.d.ts +0 -11
  433. package/lib/ai/index.d.ts.map +0 -1
  434. package/lib/ai/index.js +0 -11
  435. package/lib/ai/index.js.map +0 -1
  436. package/lib/ai/json-file.d.ts +0 -161
  437. package/lib/ai/json-file.d.ts.map +0 -1
  438. package/lib/ai/json-file.js +0 -188
  439. package/lib/ai/json-file.js.map +0 -1
  440. package/lib/ai/typescript-file.d.ts +0 -140
  441. package/lib/ai/typescript-file.d.ts.map +0 -1
  442. package/lib/ai/typescript-file.js +0 -146
  443. package/lib/ai/typescript-file.js.map +0 -1
  444. package/lib/ai/vue-file.d.ts +0 -127
  445. package/lib/ai/vue-file.d.ts.map +0 -1
  446. package/lib/ai/vue-file.js +0 -137
  447. package/lib/ai/vue-file.js.map +0 -1
  448. package/lib/ai/yaml-file.d.ts +0 -170
  449. package/lib/ai/yaml-file.d.ts.map +0 -1
  450. package/lib/ai/yaml-file.js +0 -201
  451. package/lib/ai/yaml-file.js.map +0 -1
  452. package/lib/fs/static-astro-file.d.ts +0 -35
  453. package/lib/fs/static-astro-file.d.ts.map +0 -1
  454. package/lib/fs/static-astro-file.js +0 -40
  455. package/lib/fs/static-astro-file.js.map +0 -1
  456. package/lib/fs/static-css-file.d.ts +0 -25
  457. package/lib/fs/static-css-file.d.ts.map +0 -1
  458. package/lib/fs/static-css-file.js +0 -30
  459. package/lib/fs/static-css-file.js.map +0 -1
  460. package/lib/fs/static-html-file.d.ts +0 -32
  461. package/lib/fs/static-html-file.d.ts.map +0 -1
  462. package/lib/fs/static-html-file.js +0 -37
  463. package/lib/fs/static-html-file.js.map +0 -1
  464. package/lib/fs/static-json-file.d.ts +0 -18
  465. package/lib/fs/static-json-file.d.ts.map +0 -1
  466. package/lib/fs/static-json-file.js +0 -19
  467. package/lib/fs/static-json-file.js.map +0 -1
  468. package/lib/fs/static-text-file.d.ts +0 -13
  469. package/lib/fs/static-text-file.d.ts.map +0 -1
  470. package/lib/fs/static-text-file.js +0 -9
  471. package/lib/fs/static-text-file.js.map +0 -1
  472. package/lib/fs/static-typescript-file.d.ts +0 -20
  473. package/lib/fs/static-typescript-file.d.ts.map +0 -1
  474. package/lib/fs/static-typescript-file.js +0 -16
  475. package/lib/fs/static-typescript-file.js.map +0 -1
  476. package/lib/fs/static-vue-file.d.ts +0 -29
  477. package/lib/fs/static-vue-file.d.ts.map +0 -1
  478. package/lib/fs/static-vue-file.js +0 -34
  479. package/lib/fs/static-vue-file.js.map +0 -1
  480. package/lib/fs/static-yaml-file.d.ts +0 -23
  481. package/lib/fs/static-yaml-file.d.ts.map +0 -1
  482. package/lib/fs/static-yaml-file.js +0 -10
  483. package/lib/fs/static-yaml-file.js.map +0 -1
  484. package/lib/internal/docs/providers.d.ts +0 -34
  485. package/lib/internal/docs/providers.d.ts.map +0 -1
  486. package/lib/internal/docs/providers.js +0 -200
  487. package/lib/internal/docs/providers.js.map +0 -1
  488. package/lib/runtime/bind.d.ts +0 -25
  489. package/lib/runtime/bind.d.ts.map +0 -1
  490. package/lib/runtime/bind.js +0 -76
  491. package/lib/runtime/bind.js.map +0 -1
  492. package/lib/runtime/global.d.ts +0 -8
  493. package/lib/runtime/global.d.ts.map +0 -1
  494. package/lib/runtime/global.js +0 -3
  495. package/lib/runtime/global.js.map +0 -1
  496. package/lib/runtime/plugin.d.ts +0 -35
  497. package/lib/runtime/plugin.d.ts.map +0 -1
  498. package/lib/runtime/plugin.js +0 -134
  499. package/lib/runtime/plugin.js.map +0 -1
  500. package/lib/runtime/shims.d.ts +0 -6
  501. package/lib/runtime/shims.d.ts.map +0 -1
  502. package/lib/runtime/shims.js +0 -27
  503. package/lib/runtime/shims.js.map +0 -1
  504. package/lib/runtime/state.d.ts +0 -5
  505. package/lib/runtime/state.d.ts.map +0 -1
  506. package/lib/runtime/state.js +0 -4
  507. package/lib/runtime/state.js.map +0 -1
  508. package/lib/web/astro.d.ts +0 -148
  509. package/lib/web/astro.d.ts.map +0 -1
  510. package/lib/web/astro.js +0 -419
  511. package/lib/web/astro.js.map +0 -1
  512. package/lib/web/shadcn-component.d.ts +0 -30
  513. package/lib/web/shadcn-component.d.ts.map +0 -1
  514. package/lib/web/shadcn-component.js +0 -25
  515. package/lib/web/shadcn-component.js.map +0 -1
  516. package/lib/web/shadcn.d.ts +0 -98
  517. package/lib/web/shadcn.d.ts.map +0 -1
  518. package/lib/web/shadcn.js +0 -102
  519. package/lib/web/shadcn.js.map +0 -1
  520. package/lib/web/tailwind.d.ts +0 -65
  521. package/lib/web/tailwind.d.ts.map +0 -1
  522. package/lib/web/tailwind.js +0 -98
  523. package/lib/web/tailwind.js.map +0 -1
  524. package/lib/web/vite.d.ts +0 -96
  525. package/lib/web/vite.d.ts.map +0 -1
  526. package/lib/web/vite.js +0 -232
  527. package/lib/web/vite.js.map +0 -1
  528. package/lib/web/vitepress/config.d.ts +0 -12
  529. package/lib/web/vitepress/config.d.ts.map +0 -1
  530. package/lib/web/vitepress/config.js +0 -33
  531. package/lib/web/vitepress/config.js.map +0 -1
  532. package/lib/web/vitepress/custom-theme.d.ts +0 -174
  533. package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
  534. package/lib/web/vitepress/custom-theme.js +0 -337
  535. package/lib/web/vitepress/custom-theme.js.map +0 -1
  536. package/lib/web/vitepress/dependencies.d.ts +0 -13
  537. package/lib/web/vitepress/dependencies.d.ts.map +0 -1
  538. package/lib/web/vitepress/dependencies.js +0 -37
  539. package/lib/web/vitepress/dependencies.js.map +0 -1
  540. package/lib/web/vitepress/home-page.d.ts +0 -247
  541. package/lib/web/vitepress/home-page.d.ts.map +0 -1
  542. package/lib/web/vitepress/home-page.js +0 -146
  543. package/lib/web/vitepress/home-page.js.map +0 -1
  544. package/lib/web/vitepress/index.d.ts +0 -6
  545. package/lib/web/vitepress/index.d.ts.map +0 -1
  546. package/lib/web/vitepress/index.js +0 -6
  547. package/lib/web/vitepress/index.js.map +0 -1
  548. package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
  549. package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
  550. package/lib/web/vitepress/process-front-matter-files.js +0 -73
  551. package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
  552. package/lib/web/vitepress/vitepress.d.ts +0 -75
  553. package/lib/web/vitepress/vitepress.d.ts.map +0 -1
  554. package/lib/web/vitepress/vitepress.js +0 -254
  555. package/lib/web/vitepress/vitepress.js.map +0 -1
  556. package/src/ai/ark.ts +0 -118
  557. package/src/ai/astro-file.ts +0 -270
  558. package/src/ai/client.ts +0 -117
  559. package/src/ai/css-file.ts +0 -247
  560. package/src/ai/data.ts +0 -221
  561. package/src/ai/document.ts +0 -367
  562. package/src/ai/html-file.ts +0 -244
  563. package/src/ai/index.ts +0 -10
  564. package/src/ai/json-file.ts +0 -325
  565. package/src/ai/typescript-file.ts +0 -259
  566. package/src/ai/vue-file.ts +0 -242
  567. package/src/ai/yaml-file.ts +0 -328
  568. package/src/fs/static-astro-file.ts +0 -45
  569. package/src/fs/static-css-file.ts +0 -35
  570. package/src/fs/static-html-file.ts +0 -42
  571. package/src/fs/static-json-file.ts +0 -38
  572. package/src/fs/static-text-file.ts +0 -23
  573. package/src/fs/static-typescript-file.ts +0 -37
  574. package/src/fs/static-vue-file.ts +0 -39
  575. package/src/fs/static-yaml-file.ts +0 -33
  576. package/src/internal/docs/providers.ts +0 -286
  577. package/src/runtime/bind.ts +0 -95
  578. package/src/runtime/global.ts +0 -10
  579. package/src/runtime/plugin.ts +0 -163
  580. package/src/runtime/shims.js +0 -34
  581. package/src/runtime/state.ts +0 -9
  582. package/src/web/astro.ts +0 -643
  583. package/src/web/shadcn-component.ts +0 -72
  584. package/src/web/shadcn.ts +0 -221
  585. package/src/web/tailwind.ts +0 -167
  586. package/src/web/vite.ts +0 -407
  587. package/src/web/vitepress/config.ts +0 -50
  588. package/src/web/vitepress/custom-theme.ts +0 -514
  589. package/src/web/vitepress/dependencies.ts +0 -69
  590. package/src/web/vitepress/home-page.ts +0 -378
  591. package/src/web/vitepress/index.ts +0 -5
  592. package/src/web/vitepress/process-front-matter-files.ts +0 -107
  593. package/src/web/vitepress/vitepress.ts +0 -372
  594. package/templates/sveltekit/bun.lock +0 -1099
@@ -1,514 +0,0 @@
1
- import { type } from "arktype";
2
- import path from "node:path";
3
- import type { ModelConfig } from "../../ai/client.ts";
4
- import { CSSFile } from "../../ai/css-file.ts";
5
- import { Data } from "../../ai/data.ts";
6
- import { TypeScriptFile } from "../../ai/typescript-file.ts";
7
- import { VueFile } from "../../ai/vue-file.ts";
8
- import { alchemy } from "../../alchemy.ts";
9
- import type { Context } from "../../context.ts";
10
- import { Folder } from "../../fs/folder.ts";
11
- import { Resource } from "../../resource.ts";
12
- import type { Secret } from "../../secret.ts";
13
-
14
- /**
15
- * Theme component props for customizing the layout
16
- */
17
- export interface ThemeComponentProps {
18
- /**
19
- * Name of the component
20
- */
21
- name: string;
22
-
23
- /**
24
- * Description of what the component does
25
- */
26
- description: string;
27
-
28
- /**
29
- * Features or functionality to include in the component
30
- */
31
- features?: string[];
32
- }
33
-
34
- /**
35
- * Properties for creating or updating a VitePress custom theme
36
- */
37
- export interface CustomThemeProps {
38
- /**
39
- * Output directory for the theme files
40
- */
41
- outDir: string;
42
-
43
- /**
44
- * Title of the theme
45
- */
46
- title: string;
47
-
48
- /**
49
- * Description of the theme
50
- */
51
- description: string;
52
-
53
- /**
54
- * Components to include in the theme
55
- */
56
- components?: ThemeComponentProps[];
57
-
58
- /**
59
- * Whether to include dark mode support
60
- * @default true
61
- */
62
- darkMode?: boolean;
63
-
64
- /**
65
- * Custom CSS variables for theming
66
- */
67
- customCssVars?: Record<string, string>;
68
-
69
- /**
70
- * Custom plugins to add to the theme
71
- */
72
- plugins?: string[];
73
-
74
- /**
75
- * User prompt describing the design of the theme
76
- */
77
- prompt: string;
78
-
79
- /**
80
- * Optional extension to the built-in system prompt
81
- */
82
- systemPromptExtension?: string;
83
-
84
- /**
85
- * Base URL for the OpenAI API
86
- * @default 'https://api.openai.com/v1'
87
- */
88
- baseURL?: string;
89
-
90
- /**
91
- * OpenAI API key to use for generating content
92
- * If not provided, will use OPENAI_API_KEY environment variable
93
- */
94
- apiKey?: Secret;
95
-
96
- /**
97
- * Model configuration for the AI generator
98
- */
99
- model?: ModelConfig;
100
-
101
- /**
102
- * Temperature for controlling randomness in generation
103
- * @default 0.7
104
- */
105
- temperature?: number;
106
- }
107
-
108
- /**
109
- * A generated file in the custom theme
110
- */
111
- export interface ThemeFile {
112
- /**
113
- * Path to the file
114
- */
115
- path: string;
116
-
117
- /**
118
- * Content of the file
119
- */
120
- content: string;
121
- }
122
-
123
- /**
124
- * Output for the VitePress custom theme resource
125
- */
126
- export interface CustomTheme
127
- extends CustomThemeProps,
128
- Resource<"vitepress::CustomTheme"> {
129
- /**
130
- * Path to the generated theme directory
131
- */
132
- themePath: string;
133
-
134
- /**
135
- * List of generated files
136
- */
137
- files: ThemeFile[];
138
-
139
- /**
140
- * Time at which the theme was created
141
- */
142
- createdAt: number;
143
-
144
- /**
145
- * Time at which the theme was last updated
146
- */
147
- updatedAt: number;
148
- }
149
-
150
- /**
151
- * Resource for generating a custom VitePress theme using AI.
152
- *
153
- * Generates the necessary theme files including:
154
- * - Theme entry file (index.ts)
155
- * - Layout component (Layout.vue)
156
- * - Additional components based on configuration
157
- * - Style sheets and utilities
158
- *
159
- * @example
160
- * // Create a basic custom theme
161
- * const theme = await CustomTheme("docs-theme", {
162
- * outDir: "./.vitepress/theme",
163
- * title: "My Custom Theme",
164
- * description: "A clean, minimal theme for documentation",
165
- * prompt: "Create a clean documentation theme with a sidebar and search"
166
- * });
167
- *
168
- * @example
169
- * // Create a theme with specific components
170
- * const complexTheme = await CustomTheme("blog-theme", {
171
- * outDir: "./.vitepress/theme",
172
- * title: "Blog Theme",
173
- * description: "A theme for technical blogs",
174
- * components: [
175
- * {
176
- * name: "PostList",
177
- * description: "Component that displays a list of blog posts with pagination",
178
- * features: ["thumbnail images", "post dates", "categories", "excerpts"]
179
- * },
180
- * {
181
- * name: "TableOfContents",
182
- * description: "Component that displays the current page's table of contents",
183
- * features: ["sticky positioning", "active link highlighting"]
184
- * }
185
- * ],
186
- * darkMode: true,
187
- * prompt: "Create a modern blog theme with post listings and detailed article pages"
188
- * });
189
- *
190
- * @example
191
- * // Create a theme with custom CSS variables
192
- * const brandedTheme = await CustomTheme("branded-theme", {
193
- * outDir: "./.vitepress/theme",
194
- * title: "Branded Docs",
195
- * description: "A themed documentation site with custom branding",
196
- * customCssVars: {
197
- * "--vp-c-brand": "#3a70b0",
198
- * "--vp-c-brand-light": "#5785bc",
199
- * "--vp-c-brand-lighter": "#79a1ce",
200
- * "--vp-c-brand-dark": "#2c5989",
201
- * "--vp-c-brand-darker": "#1e3d5c"
202
- * },
203
- * prompt: "Create a documentation theme with custom branding and color scheme"
204
- * });
205
- */
206
- export const CustomTheme = Resource(
207
- "vitepress::CustomTheme",
208
- async function (
209
- this: Context<CustomTheme>,
210
- id: string,
211
- props: CustomThemeProps,
212
- ): Promise<CustomTheme> {
213
- // Handle deletion
214
- if (this.phase === "delete") {
215
- // No need to actually delete files, as they're not critical infrastructure
216
- // In a real implementation, you might want to clean up files
217
- return this.destroy();
218
- }
219
-
220
- // Ensure the output directory exists
221
- await Folder(props.outDir);
222
-
223
- // Create components directory if it doesn't exist
224
- await Folder(path.join(props.outDir, "components"));
225
-
226
- // Build the system prompt with optional extension
227
- const systemPrompt = `
228
- You are creating a custom VitePress theme.
229
-
230
- A VitePress custom theme consists of multiple files:
231
- 1. An entry file (index.ts or index.js) that exports the theme object
232
- 2. A Layout component (Layout.vue) that handles the overall page structure
233
- 3. Optional additional Vue components for specific functionality
234
- 4. Optional style files for theming and customization
235
-
236
- The theme entry file must export an object with:
237
- - Layout: The root layout component (required)
238
- - enhanceApp: Function to enhance the Vue app (optional)
239
- - extends: Another theme to extend (optional)
240
-
241
- Follow these guidelines:
242
- 1. Use Vue 3 Composition API and <script setup> syntax
243
- 2. Ensure the theme is SSR-compatible
244
- 3. Use the useData() composable to access page and site data
245
- 4. Handle different page layouts (home, 404, regular pages)
246
- 5. Include proper TypeScript types
247
- 6. Use modern JavaScript/TypeScript features
248
- 7. Include clear comments explaining key functionality
249
- 8. Make components reusable and customizable
250
- 9. Include support for dark mode if requested
251
-
252
- ${props.systemPromptExtension || ""}
253
- `;
254
-
255
- // Generate the theme entry file (index.ts)
256
- const indexFile = await TypeScriptFile(`${id}-index`, {
257
- path: path.join(props.outDir, "index.ts"),
258
- prompt: await alchemy`
259
- Create a VitePress theme entry file (index.ts) for a theme named "${props.title}".
260
-
261
- The theme should:
262
- - Export a default theme object with the required properties
263
- - Import the Layout component
264
- - Include a proper enhanceApp function
265
- - Include TypeScript types
266
- - Have clear comments explaining the code
267
-
268
- ${props.description ? `Theme description: ${props.description}` : ""}
269
- ${props.plugins?.length ? `Include these plugins: ${props.plugins.join(", ")}` : ""}
270
-
271
- The output should be a complete, well-structured TypeScript file.
272
- `,
273
- system: `${systemPrompt}
274
- You are writing a TypeScript entry file for a VitePress theme.`,
275
- baseURL: props.baseURL,
276
- apiKey: props.apiKey,
277
- model: props.model,
278
- temperature: props.temperature,
279
- });
280
-
281
- // Generate the Layout component
282
- const layoutFile = await VueFile(`${id}-layout`, {
283
- path: path.join(props.outDir, "Layout.vue"),
284
- prompt: await alchemy`
285
- Create a Layout.vue component for a VitePress theme named "${props.title}".
286
-
287
- The layout should:
288
- - Use <script setup> with the Composition API
289
- - Import and use the useData() composable
290
- - Handle different page types (regular pages, home pages, 404 pages)
291
- - Include a <Content /> component to render the page content
292
- - Have a clean, modern design
293
- - Include proper TypeScript types
294
- - Use Vue's Teleport for elements like modals if needed
295
-
296
- The layout should use modular components for different parts of the UI, such as:
297
- - NavBar/Header component for navigation
298
- - Sidebar component for documentation navigation
299
- - Footer component
300
- - Home page specific components (like hero sections)
301
- - 404 page component
302
-
303
- These components should be imported from the components directory.
304
-
305
- ${props.description ? `Theme description: ${props.description}` : ""}
306
- ${props.darkMode !== false ? "Include support for dark mode" : "Dark mode is not required"}
307
-
308
- The layout should follow the user's requirements:
309
- ${props.prompt}
310
-
311
- The output should be a complete, well-structured Vue component file.
312
- `,
313
- system: `${systemPrompt}
314
- You are writing a Vue component for a VitePress theme Layout.
315
- Import smaller components from the components directory using relative paths (e.g., import NavBar from './components/NavBar.vue').
316
- Break down the layout into logical components like NavBar, Sidebar, Footer, etc., which will be generated separately.`,
317
- baseURL: props.baseURL,
318
- apiKey: props.apiKey,
319
- model: props.model,
320
- temperature: props.temperature,
321
- });
322
-
323
- // Extract component imports from the Layout.vue file
324
- const componentImportsData = await Data(`${id}-component-imports`, {
325
- schema: type({
326
- components: type({
327
- name: type("string").describe(
328
- "Component name as used in the import statement (e.g., NavBar, Footer)",
329
- ),
330
- path: type("string").describe(
331
- "Import path as written in the import statement (e.g., './components/NavBar.vue')",
332
- ),
333
- purpose: type("string").describe(
334
- "A clear description of the component's purpose, functionality, and responsibilities in the layout",
335
- ),
336
- }).array(),
337
- }),
338
- prompt: await alchemy`
339
- Analyze the following Layout.vue file and extract information about all the component imports:
340
-
341
- ${layoutFile.content}
342
-
343
- For each component import:
344
- 1. Extract the component name (e.g., NavBar)
345
- 2. Extract the import path (e.g., ./components/NavBar.vue)
346
- 3. Infer the purpose of the component based on its name and usage in the file
347
-
348
- Return a structured list of all component imports found in the file.
349
- Only include components that are imported from local files (not from VitePress or other libraries).
350
- Focus on components that are likely Vue components (.vue files).
351
- `,
352
- system:
353
- "You are a code analyzer tasked with extracting component imports from a Vue file. Be precise and thorough in identifying all local component imports.",
354
- baseURL: props.baseURL,
355
- apiKey: props.apiKey,
356
- model: props.model,
357
- temperature: props.temperature || 0.2, // Lower temperature for more deterministic extraction
358
- });
359
-
360
- // Generate the detected components
361
- const autoComponentFiles = await Promise.all(
362
- componentImportsData.object.components.map(async (component) => {
363
- const componentName = component.name;
364
- const componentPath = component.path;
365
- const componentPurpose = component.purpose;
366
-
367
- // Extract the relative path from the import
368
- const relativePath = componentPath.startsWith("./")
369
- ? componentPath.slice(2) // Remove './'
370
- : componentPath.startsWith("/")
371
- ? componentPath.slice(1) // Remove '/'
372
- : componentPath;
373
-
374
- // Compute the full file path
375
- const fullPath = path.join(props.outDir, relativePath);
376
-
377
- return VueFile(`${id}-component-${componentName}`, {
378
- path: fullPath,
379
- prompt: await alchemy`
380
- Create a Vue component named "${componentName}" for a VitePress theme.
381
-
382
- Component purpose: ${componentPurpose}
383
-
384
- The component should:
385
- - Use <script setup> with the Composition API
386
- - Have a clean, focused design for its specific purpose
387
- - Include proper TypeScript types
388
- - Be reusable and customizable
389
- - Include clear comments explaining key functionality
390
- - Fit seamlessly with the overall theme design described below
391
-
392
- This component will be used in the following layout context:
393
- ${layoutFile.content}
394
-
395
- ${props.description ? `Theme description: ${props.description}` : ""}
396
- ${props.darkMode !== false ? "Include support for dark mode" : "Dark mode is not required"}
397
-
398
- The component should follow the user's theme requirements:
399
- ${props.prompt}
400
- `,
401
- system: `${systemPrompt}
402
- You are writing a Vue component for a VitePress theme. This component (${componentName}) is intended to ${componentPurpose}.
403
- Make sure it integrates well with the overall layout and theme style.`,
404
- baseURL: props.baseURL,
405
- apiKey: props.apiKey,
406
- model: props.model,
407
- temperature: props.temperature,
408
- });
409
- }),
410
- );
411
-
412
- // Generate user-specified components if provided
413
- const userComponentFiles = await Promise.all(
414
- (props.components || []).map(async (component) => {
415
- return VueFile(`${id}-user-component-${component.name}`, {
416
- path: path.join(props.outDir, "components", `${component.name}.vue`),
417
- prompt: await alchemy`
418
- Create a Vue component named "${component.name}" for a VitePress theme.
419
-
420
- Component description: ${component.description}
421
-
422
- The component should:
423
- - Use <script setup> with the Composition API
424
- - Have a clean, focused design for its specific purpose
425
- - Include proper TypeScript types
426
- - Be reusable and customizable
427
- - Include clear comments
428
-
429
- ${
430
- component.features?.length
431
- ? `Include these features:
432
- ${component.features.map((f) => `- ${f}`).join("\n")}`
433
- : ""
434
- }
435
-
436
- Make sure the component integrates well with the overall theme.
437
-
438
- The output should be a complete, well-structured Vue component file.
439
- `,
440
- system: `${systemPrompt}
441
- You are writing a Vue component for a VitePress theme.`,
442
- baseURL: props.baseURL,
443
- apiKey: props.apiKey,
444
- model: props.model,
445
- temperature: props.temperature,
446
- });
447
- }),
448
- );
449
-
450
- // Generate styles file
451
- const stylesFile = await CSSFile(`${id}-styles`, {
452
- path: path.join(props.outDir, "styles.css"),
453
- prompt: await alchemy`
454
- Create a CSS styles file for a VitePress theme named "${props.title}".
455
-
456
- The styles should:
457
- - Define a cohesive set of styles for the theme
458
- - Include CSS variables for customization
459
- - Use modern CSS features
460
- - Be well-organized with clear comments
461
- ${props.darkMode !== false ? "- Include dark mode variants using :root.dark selectors" : ""}
462
-
463
- ${props.description ? `Theme description: ${props.description}` : ""}
464
-
465
- ${
466
- props.customCssVars
467
- ? `Include these custom CSS variables:
468
- ${Object.entries(props.customCssVars)
469
- .map(([key, value]) => `${key}: ${value};`)
470
- .join("\n")}`
471
- : ""
472
- }
473
-
474
- Style according to the user's requirements:
475
- ${props.prompt}
476
-
477
- The output should be a complete, well-structured CSS file.
478
- `,
479
- system: `${systemPrompt}
480
- You are writing CSS styles for a VitePress theme.`,
481
- baseURL: props.baseURL,
482
- apiKey: props.apiKey,
483
- model: props.model,
484
- temperature: props.temperature,
485
- });
486
-
487
- // Collect all generated files
488
- const allFiles = [
489
- indexFile,
490
- layoutFile,
491
- ...autoComponentFiles,
492
- ...userComponentFiles,
493
- stylesFile,
494
- ];
495
-
496
- // Create file objects for resource output
497
- const files = allFiles.map((file) => ({
498
- path: file.path,
499
- content: file.content,
500
- }));
501
-
502
- // Get the current timestamp
503
- const now = Date.now();
504
-
505
- // Return the resource using this() to construct output
506
- return this({
507
- ...props,
508
- themePath: props.outDir,
509
- files,
510
- createdAt: this.output?.createdAt || now,
511
- updatedAt: now,
512
- });
513
- },
514
- );
@@ -1,69 +0,0 @@
1
- import { exec } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import type { Context } from "../../context.ts";
4
- import { Resource } from "../../resource.ts";
5
- import { logger } from "../../util/logger.ts";
6
-
7
- const execAsync = promisify(exec);
8
-
9
- export type InstallDependencies = Resource<"project::InstallDependencies">;
10
-
11
- export const InstallDependencies = Resource(
12
- "project::InstallDependencies",
13
- {
14
- alwaysUpdate: true,
15
- },
16
- async function (
17
- this: Context<InstallDependencies>,
18
- _id: string,
19
- {
20
- cwd,
21
- dependencies,
22
- devDependencies,
23
- }: {
24
- cwd: string;
25
- dependencies?: Record<string, string>;
26
- devDependencies?: Record<string, string>;
27
- },
28
- ) {
29
- if (this.phase === "delete") {
30
- return this.destroy();
31
- }
32
-
33
- await installDependencies(cwd, dependencies);
34
- await installDependencies(cwd, devDependencies, "-D");
35
- await execAsync("bun install", { cwd });
36
-
37
- return this({});
38
- },
39
- );
40
-
41
- function isInstallableVersion(version: string) {
42
- // TODO: file:// ?
43
- return !version.startsWith("workspace:");
44
- }
45
-
46
- export function fixedDependencies(dependencies?: Record<string, string>) {
47
- if (!dependencies) return {};
48
- return Object.fromEntries(
49
- Object.entries(dependencies).filter(
50
- ([, value]) => !isInstallableVersion(value),
51
- ),
52
- );
53
- }
54
-
55
- export async function installDependencies(
56
- cwd: string,
57
- dependencies: Record<string, string> | undefined,
58
- ...args: string[]
59
- ) {
60
- if (!dependencies) return;
61
- const deps = Object.entries(dependencies)
62
- .filter(([, value]) => isInstallableVersion(value))
63
- .map(([pkg, version]) => `${pkg}@${version}`)
64
- .join(" ");
65
-
66
- const cmd = `bun add ${args.join(" ")} ${deps}`;
67
- logger.log(cmd);
68
- await execAsync(cmd, { cwd });
69
- }