alchemy 0.62.2 → 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 (611) hide show
  1. package/bin/alchemy.js +1518 -1204
  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 +7 -3
  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 +6 -4
  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/vite/vite.d.ts +1 -1
  163. package/lib/cloudflare/vite/vite.d.ts.map +1 -1
  164. package/lib/cloudflare/vite/vite.js +1 -1
  165. package/lib/cloudflare/vite/vite.js.map +1 -1
  166. package/lib/cloudflare/website.js +1 -1
  167. package/lib/cloudflare/website.js.map +1 -1
  168. package/lib/cloudflare/worker.d.ts +1 -1
  169. package/lib/cloudflare/worker.d.ts.map +1 -1
  170. package/lib/cloudflare/worker.js +12 -7
  171. package/lib/cloudflare/worker.js.map +1 -1
  172. package/lib/cloudflare/wrangler.json.d.ts +1 -1
  173. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  174. package/lib/cloudflare/wrangler.json.js +5 -3
  175. package/lib/cloudflare/wrangler.json.js.map +1 -1
  176. package/lib/docker/container.d.ts +6 -0
  177. package/lib/docker/container.d.ts.map +1 -1
  178. package/lib/docker/container.js +5 -1
  179. package/lib/docker/container.js.map +1 -1
  180. package/lib/docker/network.d.ts +8 -2
  181. package/lib/docker/network.d.ts.map +1 -1
  182. package/lib/docker/network.js +7 -2
  183. package/lib/docker/network.js.map +1 -1
  184. package/lib/docker/volume.d.ts +8 -2
  185. package/lib/docker/volume.d.ts.map +1 -1
  186. package/lib/docker/volume.js +6 -4
  187. package/lib/docker/volume.js.map +1 -1
  188. package/lib/esbuild/bundle.d.ts +1 -1
  189. package/lib/fs/index.d.ts +0 -8
  190. package/lib/fs/index.d.ts.map +1 -1
  191. package/lib/fs/index.js +0 -8
  192. package/lib/fs/index.js.map +1 -1
  193. package/lib/github/client.d.ts +1 -1
  194. package/lib/github/client.d.ts.map +1 -1
  195. package/lib/github/client.js +2 -1
  196. package/lib/github/client.js.map +1 -1
  197. package/lib/github/repository-environment.d.ts +8 -2
  198. package/lib/github/repository-environment.d.ts.map +1 -1
  199. package/lib/github/repository-environment.js +16 -12
  200. package/lib/github/repository-environment.js.map +1 -1
  201. package/lib/neon/project.d.ts +7 -1
  202. package/lib/neon/project.d.ts.map +1 -1
  203. package/lib/neon/project.js +10 -6
  204. package/lib/neon/project.js.map +1 -1
  205. package/lib/planetscale/branch.d.ts +4 -2
  206. package/lib/planetscale/branch.d.ts.map +1 -1
  207. package/lib/planetscale/branch.js +18 -12
  208. package/lib/planetscale/branch.js.map +1 -1
  209. package/lib/planetscale/database.d.ts +8 -2
  210. package/lib/planetscale/database.d.ts.map +1 -1
  211. package/lib/planetscale/database.js +24 -16
  212. package/lib/planetscale/database.js.map +1 -1
  213. package/lib/planetscale/password.d.ts +8 -2
  214. package/lib/planetscale/password.d.ts.map +1 -1
  215. package/lib/planetscale/password.js +2 -2
  216. package/lib/planetscale/password.js.map +1 -1
  217. package/lib/resource.d.ts +0 -2
  218. package/lib/resource.d.ts.map +1 -1
  219. package/lib/resource.js +1 -9
  220. package/lib/resource.js.map +1 -1
  221. package/lib/scope.d.ts +9 -3
  222. package/lib/scope.d.ts.map +1 -1
  223. package/lib/scope.js +21 -34
  224. package/lib/scope.js.map +1 -1
  225. package/lib/sentry/client-key.d.ts +7 -1
  226. package/lib/sentry/client-key.d.ts.map +1 -1
  227. package/lib/sentry/client-key.js +45 -6
  228. package/lib/sentry/client-key.js.map +1 -1
  229. package/lib/sentry/project.d.ts +8 -2
  230. package/lib/sentry/project.d.ts.map +1 -1
  231. package/lib/sentry/project.js +35 -5
  232. package/lib/sentry/project.js.map +1 -1
  233. package/lib/sentry/team.d.ts +8 -2
  234. package/lib/sentry/team.d.ts.map +1 -1
  235. package/lib/sentry/team.js +36 -6
  236. package/lib/sentry/team.js.map +1 -1
  237. package/lib/serde.d.ts +0 -5
  238. package/lib/serde.d.ts.map +1 -1
  239. package/lib/serde.js +0 -28
  240. package/lib/serde.js.map +1 -1
  241. package/lib/state/d1-state-store.d.ts +1 -1
  242. package/lib/state/d1-state-store.d.ts.map +1 -1
  243. package/lib/state/d1-state-store.js +5 -5
  244. package/lib/state/d1-state-store.js.map +1 -1
  245. package/lib/state/sqlite-state-store.d.ts.map +1 -1
  246. package/lib/state/sqlite-state-store.js +7 -11
  247. package/lib/state/sqlite-state-store.js.map +1 -1
  248. package/lib/stripe/card.d.ts.map +1 -1
  249. package/lib/stripe/card.js +3 -2
  250. package/lib/stripe/card.js.map +1 -1
  251. package/lib/stripe/client.d.ts +2 -2
  252. package/lib/stripe/client.d.ts.map +1 -1
  253. package/lib/stripe/client.js +4 -3
  254. package/lib/stripe/client.js.map +1 -1
  255. package/lib/stripe/coupon.d.ts.map +1 -1
  256. package/lib/stripe/coupon.js +4 -3
  257. package/lib/stripe/coupon.js.map +1 -1
  258. package/lib/stripe/customer.js +2 -2
  259. package/lib/stripe/customer.js.map +1 -1
  260. package/lib/stripe/entitlements-feature.d.ts.map +1 -1
  261. package/lib/stripe/entitlements-feature.js +3 -2
  262. package/lib/stripe/entitlements-feature.js.map +1 -1
  263. package/lib/stripe/file.d.ts.map +1 -1
  264. package/lib/stripe/file.js +3 -2
  265. package/lib/stripe/file.js.map +1 -1
  266. package/lib/stripe/meter.js +2 -2
  267. package/lib/stripe/meter.js.map +1 -1
  268. package/lib/stripe/portal-configuration.d.ts.map +1 -1
  269. package/lib/stripe/portal-configuration.js +3 -2
  270. package/lib/stripe/portal-configuration.js.map +1 -1
  271. package/lib/stripe/price.d.ts.map +1 -1
  272. package/lib/stripe/price.js +3 -2
  273. package/lib/stripe/price.js.map +1 -1
  274. package/lib/stripe/product-feature.d.ts.map +1 -1
  275. package/lib/stripe/product-feature.js +3 -2
  276. package/lib/stripe/product-feature.js.map +1 -1
  277. package/lib/stripe/product.d.ts.map +1 -1
  278. package/lib/stripe/product.js +3 -2
  279. package/lib/stripe/product.js.map +1 -1
  280. package/lib/stripe/promotion-code.d.ts.map +1 -1
  281. package/lib/stripe/promotion-code.js +3 -2
  282. package/lib/stripe/promotion-code.js.map +1 -1
  283. package/lib/stripe/shipping-rate.d.ts.map +1 -1
  284. package/lib/stripe/shipping-rate.js +4 -3
  285. package/lib/stripe/shipping-rate.js.map +1 -1
  286. package/lib/stripe/tax-rate.d.ts.map +1 -1
  287. package/lib/stripe/tax-rate.js +3 -2
  288. package/lib/stripe/tax-rate.js.map +1 -1
  289. package/lib/stripe/webhook.d.ts.map +1 -1
  290. package/lib/stripe/webhook.js +4 -3
  291. package/lib/stripe/webhook.js.map +1 -1
  292. package/lib/test/vitest.d.ts.map +1 -1
  293. package/lib/test/vitest.js +1 -0
  294. package/lib/test/vitest.js.map +1 -1
  295. package/lib/upstash/redis.d.ts +8 -2
  296. package/lib/upstash/redis.d.ts.map +1 -1
  297. package/lib/upstash/redis.js +5 -4
  298. package/lib/upstash/redis.js.map +1 -1
  299. package/lib/util/ignore-matcher.d.ts.map +1 -1
  300. package/lib/util/ignore-matcher.js +3 -1
  301. package/lib/util/ignore-matcher.js.map +1 -1
  302. package/lib/util/peer.d.ts +10 -0
  303. package/lib/util/peer.d.ts.map +1 -0
  304. package/lib/util/peer.js +42 -0
  305. package/lib/util/peer.js.map +1 -0
  306. package/lib/util/telemetry/constants.d.ts.map +1 -1
  307. package/lib/util/telemetry/constants.js +2 -2
  308. package/lib/util/telemetry/constants.js.map +1 -1
  309. package/lib/vercel/project.d.ts +7 -1
  310. package/lib/vercel/project.d.ts.map +1 -1
  311. package/lib/vercel/project.js +28 -0
  312. package/lib/vercel/project.js.map +1 -1
  313. package/package.json +88 -74
  314. package/src/alchemy.ts +76 -222
  315. package/src/apply.ts +6 -19
  316. package/src/aws/account-id.ts +6 -3
  317. package/src/aws/bucket.ts +43 -32
  318. package/src/aws/ec2/security-group.ts +15 -3
  319. package/src/aws/function.ts +65 -39
  320. package/src/aws/policy-attachment.ts +10 -6
  321. package/src/aws/policy.ts +33 -15
  322. package/src/aws/queue.ts +50 -29
  323. package/src/aws/role.ts +37 -20
  324. package/src/aws/ses.ts +24 -20
  325. package/src/aws/ssm-parameter.ts +40 -20
  326. package/src/aws/table.ts +35 -17
  327. package/src/cloudflare/account-api-token.ts +9 -7
  328. package/src/cloudflare/ai-gateway.ts +37 -34
  329. package/src/cloudflare/api-schema.ts +33 -26
  330. package/src/cloudflare/api-shield.ts +15 -2
  331. package/src/cloudflare/astro/astro.ts +5 -1
  332. package/src/cloudflare/astro/plugin.ts +2 -1
  333. package/src/cloudflare/bindings.ts +2 -2
  334. package/src/cloudflare/bound.ts +1 -1
  335. package/src/cloudflare/bucket.ts +242 -3
  336. package/src/cloudflare/compatibility-date.gen.ts +1 -1
  337. package/src/cloudflare/container.ts +23 -12
  338. package/src/cloudflare/custom-domain.ts +2 -2
  339. package/src/cloudflare/d1-database.ts +11 -4
  340. package/src/cloudflare/dispatch-namespace.ts +10 -7
  341. package/src/cloudflare/hyperdrive.ts +13 -3
  342. package/src/cloudflare/kv-namespace.ts +25 -2
  343. package/src/cloudflare/miniflare/miniflare-worker-proxy.ts +3 -1
  344. package/src/cloudflare/miniflare/paths.ts +13 -0
  345. package/src/cloudflare/pipeline.ts +76 -28
  346. package/src/cloudflare/queue-consumer.ts +1 -1
  347. package/src/cloudflare/queue.ts +65 -54
  348. package/src/cloudflare/react-router/react-router.ts +28 -2
  349. package/src/cloudflare/redwood/plugin.ts +3 -2
  350. package/src/cloudflare/route.ts +1 -1
  351. package/src/cloudflare/ruleset.ts +7 -2
  352. package/src/cloudflare/secret.ts +20 -31
  353. package/src/cloudflare/secrets-store.ts +7 -3
  354. package/src/cloudflare/tunnel.ts +13 -2
  355. package/src/cloudflare/vectorize-index.ts +14 -3
  356. package/src/cloudflare/vite/plugin.ts +3 -2
  357. package/src/cloudflare/vite/vite.ts +2 -3
  358. package/src/cloudflare/website.ts +1 -1
  359. package/src/cloudflare/worker.ts +35 -23
  360. package/src/cloudflare/wrangler.json.ts +7 -4
  361. package/src/docker/container.ts +13 -1
  362. package/src/docker/network.ts +18 -3
  363. package/src/docker/volume.ts +17 -6
  364. package/src/fs/index.ts +0 -8
  365. package/src/github/client.ts +6 -2
  366. package/src/github/repository-environment.ts +27 -13
  367. package/src/neon/project.ts +20 -6
  368. package/src/planetscale/branch.ts +24 -13
  369. package/src/planetscale/database.ts +38 -17
  370. package/src/planetscale/password.ts +10 -3
  371. package/src/resource.ts +1 -10
  372. package/src/scope.ts +29 -38
  373. package/src/sentry/client-key.ts +74 -6
  374. package/src/sentry/project.ts +59 -6
  375. package/src/sentry/team.ts +55 -7
  376. package/src/serde.ts +0 -44
  377. package/src/state/d1-state-store.ts +13 -6
  378. package/src/state/sqlite-state-store.ts +16 -17
  379. package/src/stripe/card.ts +5 -2
  380. package/src/stripe/client.ts +10 -3
  381. package/src/stripe/coupon.ts +4 -3
  382. package/src/stripe/customer.ts +2 -2
  383. package/src/stripe/entitlements-feature.ts +5 -2
  384. package/src/stripe/file.ts +3 -2
  385. package/src/stripe/meter.ts +2 -2
  386. package/src/stripe/portal-configuration.ts +5 -2
  387. package/src/stripe/price.ts +3 -2
  388. package/src/stripe/product-feature.ts +5 -2
  389. package/src/stripe/product.ts +3 -2
  390. package/src/stripe/promotion-code.ts +3 -2
  391. package/src/stripe/shipping-rate.ts +4 -3
  392. package/src/stripe/tax-rate.ts +3 -2
  393. package/src/stripe/webhook.ts +4 -3
  394. package/src/test/vitest.ts +1 -0
  395. package/src/upstash/redis.ts +15 -5
  396. package/src/util/ignore-matcher.ts +3 -1
  397. package/src/util/peer.ts +53 -0
  398. package/src/util/telemetry/constants.ts +2 -2
  399. package/src/vercel/project.ts +46 -1
  400. package/templates/astro/_gitignore +2 -1
  401. package/templates/hono/README.md +19 -0
  402. package/templates/hono/_env +1 -0
  403. package/templates/hono/_env.example +1 -0
  404. package/templates/hono/_gitignore +34 -0
  405. package/templates/hono/alchemy.run.ts +22 -0
  406. package/templates/hono/package.json +18 -0
  407. package/templates/hono/src/index.ts +17 -0
  408. package/templates/hono/tsconfig.json +13 -0
  409. package/templates/hono/types/env.d.ts +16 -0
  410. package/templates/nuxt/_gitignore +2 -1
  411. package/templates/react-router/_gitignore +1 -0
  412. package/templates/react-router/vite.config.ts +5 -3
  413. package/templates/rwsdk/_gitignore +2 -3
  414. package/templates/sveltekit/_gitignore +2 -1
  415. package/templates/tanstack-start/_gitignore +2 -1
  416. package/templates/typescript/_gitignore +2 -1
  417. package/templates/vite/_gitignore +2 -1
  418. package/workers/cloudflare-state-store.js +69 -74
  419. package/workers/dofs-state-store.js +1 -1
  420. package/bin/bootstrap-s3.ts +0 -255
  421. package/lib/ai/ark.d.ts +0 -12
  422. package/lib/ai/ark.d.ts.map +0 -1
  423. package/lib/ai/ark.js +0 -87
  424. package/lib/ai/ark.js.map +0 -1
  425. package/lib/ai/astro-file.d.ts +0 -138
  426. package/lib/ai/astro-file.d.ts.map +0 -1
  427. package/lib/ai/astro-file.js +0 -158
  428. package/lib/ai/astro-file.js.map +0 -1
  429. package/lib/ai/client.d.ts +0 -51
  430. package/lib/ai/client.d.ts.map +0 -1
  431. package/lib/ai/client.js +0 -58
  432. package/lib/ai/client.js.map +0 -1
  433. package/lib/ai/css-file.d.ts +0 -132
  434. package/lib/ai/css-file.d.ts.map +0 -1
  435. package/lib/ai/css-file.js +0 -142
  436. package/lib/ai/css-file.js.map +0 -1
  437. package/lib/ai/data.d.ts +0 -152
  438. package/lib/ai/data.d.ts.map +0 -1
  439. package/lib/ai/data.js +0 -120
  440. package/lib/ai/data.js.map +0 -1
  441. package/lib/ai/document.d.ts +0 -208
  442. package/lib/ai/document.d.ts.map +0 -1
  443. package/lib/ai/document.js +0 -206
  444. package/lib/ai/document.js.map +0 -1
  445. package/lib/ai/html-file.d.ts +0 -129
  446. package/lib/ai/html-file.d.ts.map +0 -1
  447. package/lib/ai/html-file.js +0 -139
  448. package/lib/ai/html-file.js.map +0 -1
  449. package/lib/ai/index.d.ts +0 -11
  450. package/lib/ai/index.d.ts.map +0 -1
  451. package/lib/ai/index.js +0 -11
  452. package/lib/ai/index.js.map +0 -1
  453. package/lib/ai/json-file.d.ts +0 -161
  454. package/lib/ai/json-file.d.ts.map +0 -1
  455. package/lib/ai/json-file.js +0 -188
  456. package/lib/ai/json-file.js.map +0 -1
  457. package/lib/ai/typescript-file.d.ts +0 -140
  458. package/lib/ai/typescript-file.d.ts.map +0 -1
  459. package/lib/ai/typescript-file.js +0 -146
  460. package/lib/ai/typescript-file.js.map +0 -1
  461. package/lib/ai/vue-file.d.ts +0 -127
  462. package/lib/ai/vue-file.d.ts.map +0 -1
  463. package/lib/ai/vue-file.js +0 -137
  464. package/lib/ai/vue-file.js.map +0 -1
  465. package/lib/ai/yaml-file.d.ts +0 -170
  466. package/lib/ai/yaml-file.d.ts.map +0 -1
  467. package/lib/ai/yaml-file.js +0 -201
  468. package/lib/ai/yaml-file.js.map +0 -1
  469. package/lib/fs/static-astro-file.d.ts +0 -35
  470. package/lib/fs/static-astro-file.d.ts.map +0 -1
  471. package/lib/fs/static-astro-file.js +0 -40
  472. package/lib/fs/static-astro-file.js.map +0 -1
  473. package/lib/fs/static-css-file.d.ts +0 -25
  474. package/lib/fs/static-css-file.d.ts.map +0 -1
  475. package/lib/fs/static-css-file.js +0 -30
  476. package/lib/fs/static-css-file.js.map +0 -1
  477. package/lib/fs/static-html-file.d.ts +0 -32
  478. package/lib/fs/static-html-file.d.ts.map +0 -1
  479. package/lib/fs/static-html-file.js +0 -37
  480. package/lib/fs/static-html-file.js.map +0 -1
  481. package/lib/fs/static-json-file.d.ts +0 -18
  482. package/lib/fs/static-json-file.d.ts.map +0 -1
  483. package/lib/fs/static-json-file.js +0 -19
  484. package/lib/fs/static-json-file.js.map +0 -1
  485. package/lib/fs/static-text-file.d.ts +0 -13
  486. package/lib/fs/static-text-file.d.ts.map +0 -1
  487. package/lib/fs/static-text-file.js +0 -9
  488. package/lib/fs/static-text-file.js.map +0 -1
  489. package/lib/fs/static-typescript-file.d.ts +0 -20
  490. package/lib/fs/static-typescript-file.d.ts.map +0 -1
  491. package/lib/fs/static-typescript-file.js +0 -16
  492. package/lib/fs/static-typescript-file.js.map +0 -1
  493. package/lib/fs/static-vue-file.d.ts +0 -29
  494. package/lib/fs/static-vue-file.d.ts.map +0 -1
  495. package/lib/fs/static-vue-file.js +0 -34
  496. package/lib/fs/static-vue-file.js.map +0 -1
  497. package/lib/fs/static-yaml-file.d.ts +0 -23
  498. package/lib/fs/static-yaml-file.d.ts.map +0 -1
  499. package/lib/fs/static-yaml-file.js +0 -10
  500. package/lib/fs/static-yaml-file.js.map +0 -1
  501. package/lib/internal/docs/providers.d.ts +0 -34
  502. package/lib/internal/docs/providers.d.ts.map +0 -1
  503. package/lib/internal/docs/providers.js +0 -200
  504. package/lib/internal/docs/providers.js.map +0 -1
  505. package/lib/runtime/bind.d.ts +0 -25
  506. package/lib/runtime/bind.d.ts.map +0 -1
  507. package/lib/runtime/bind.js +0 -76
  508. package/lib/runtime/bind.js.map +0 -1
  509. package/lib/runtime/global.d.ts +0 -8
  510. package/lib/runtime/global.d.ts.map +0 -1
  511. package/lib/runtime/global.js +0 -3
  512. package/lib/runtime/global.js.map +0 -1
  513. package/lib/runtime/plugin.d.ts +0 -35
  514. package/lib/runtime/plugin.d.ts.map +0 -1
  515. package/lib/runtime/plugin.js +0 -134
  516. package/lib/runtime/plugin.js.map +0 -1
  517. package/lib/runtime/shims.d.ts +0 -6
  518. package/lib/runtime/shims.d.ts.map +0 -1
  519. package/lib/runtime/shims.js +0 -27
  520. package/lib/runtime/shims.js.map +0 -1
  521. package/lib/runtime/state.d.ts +0 -5
  522. package/lib/runtime/state.d.ts.map +0 -1
  523. package/lib/runtime/state.js +0 -4
  524. package/lib/runtime/state.js.map +0 -1
  525. package/lib/web/astro.d.ts +0 -148
  526. package/lib/web/astro.d.ts.map +0 -1
  527. package/lib/web/astro.js +0 -419
  528. package/lib/web/astro.js.map +0 -1
  529. package/lib/web/shadcn-component.d.ts +0 -30
  530. package/lib/web/shadcn-component.d.ts.map +0 -1
  531. package/lib/web/shadcn-component.js +0 -25
  532. package/lib/web/shadcn-component.js.map +0 -1
  533. package/lib/web/shadcn.d.ts +0 -98
  534. package/lib/web/shadcn.d.ts.map +0 -1
  535. package/lib/web/shadcn.js +0 -102
  536. package/lib/web/shadcn.js.map +0 -1
  537. package/lib/web/tailwind.d.ts +0 -65
  538. package/lib/web/tailwind.d.ts.map +0 -1
  539. package/lib/web/tailwind.js +0 -98
  540. package/lib/web/tailwind.js.map +0 -1
  541. package/lib/web/vite.d.ts +0 -96
  542. package/lib/web/vite.d.ts.map +0 -1
  543. package/lib/web/vite.js +0 -232
  544. package/lib/web/vite.js.map +0 -1
  545. package/lib/web/vitepress/config.d.ts +0 -12
  546. package/lib/web/vitepress/config.d.ts.map +0 -1
  547. package/lib/web/vitepress/config.js +0 -33
  548. package/lib/web/vitepress/config.js.map +0 -1
  549. package/lib/web/vitepress/custom-theme.d.ts +0 -174
  550. package/lib/web/vitepress/custom-theme.d.ts.map +0 -1
  551. package/lib/web/vitepress/custom-theme.js +0 -337
  552. package/lib/web/vitepress/custom-theme.js.map +0 -1
  553. package/lib/web/vitepress/dependencies.d.ts +0 -13
  554. package/lib/web/vitepress/dependencies.d.ts.map +0 -1
  555. package/lib/web/vitepress/dependencies.js +0 -37
  556. package/lib/web/vitepress/dependencies.js.map +0 -1
  557. package/lib/web/vitepress/home-page.d.ts +0 -247
  558. package/lib/web/vitepress/home-page.d.ts.map +0 -1
  559. package/lib/web/vitepress/home-page.js +0 -146
  560. package/lib/web/vitepress/home-page.js.map +0 -1
  561. package/lib/web/vitepress/index.d.ts +0 -6
  562. package/lib/web/vitepress/index.d.ts.map +0 -1
  563. package/lib/web/vitepress/index.js +0 -6
  564. package/lib/web/vitepress/index.js.map +0 -1
  565. package/lib/web/vitepress/process-front-matter-files.d.ts +0 -19
  566. package/lib/web/vitepress/process-front-matter-files.d.ts.map +0 -1
  567. package/lib/web/vitepress/process-front-matter-files.js +0 -73
  568. package/lib/web/vitepress/process-front-matter-files.js.map +0 -1
  569. package/lib/web/vitepress/vitepress.d.ts +0 -75
  570. package/lib/web/vitepress/vitepress.d.ts.map +0 -1
  571. package/lib/web/vitepress/vitepress.js +0 -254
  572. package/lib/web/vitepress/vitepress.js.map +0 -1
  573. package/src/ai/ark.ts +0 -118
  574. package/src/ai/astro-file.ts +0 -270
  575. package/src/ai/client.ts +0 -117
  576. package/src/ai/css-file.ts +0 -247
  577. package/src/ai/data.ts +0 -221
  578. package/src/ai/document.ts +0 -367
  579. package/src/ai/html-file.ts +0 -244
  580. package/src/ai/index.ts +0 -10
  581. package/src/ai/json-file.ts +0 -325
  582. package/src/ai/typescript-file.ts +0 -259
  583. package/src/ai/vue-file.ts +0 -242
  584. package/src/ai/yaml-file.ts +0 -328
  585. package/src/fs/static-astro-file.ts +0 -45
  586. package/src/fs/static-css-file.ts +0 -35
  587. package/src/fs/static-html-file.ts +0 -42
  588. package/src/fs/static-json-file.ts +0 -38
  589. package/src/fs/static-text-file.ts +0 -23
  590. package/src/fs/static-typescript-file.ts +0 -37
  591. package/src/fs/static-vue-file.ts +0 -39
  592. package/src/fs/static-yaml-file.ts +0 -33
  593. package/src/internal/docs/providers.ts +0 -286
  594. package/src/runtime/bind.ts +0 -95
  595. package/src/runtime/global.ts +0 -10
  596. package/src/runtime/plugin.ts +0 -163
  597. package/src/runtime/shims.js +0 -34
  598. package/src/runtime/state.ts +0 -9
  599. package/src/web/astro.ts +0 -643
  600. package/src/web/shadcn-component.ts +0 -72
  601. package/src/web/shadcn.ts +0 -221
  602. package/src/web/tailwind.ts +0 -167
  603. package/src/web/vite.ts +0 -407
  604. package/src/web/vitepress/config.ts +0 -50
  605. package/src/web/vitepress/custom-theme.ts +0 -514
  606. package/src/web/vitepress/dependencies.ts +0 -69
  607. package/src/web/vitepress/home-page.ts +0 -378
  608. package/src/web/vitepress/index.ts +0 -5
  609. package/src/web/vitepress/process-front-matter-files.ts +0 -107
  610. package/src/web/vitepress/vitepress.ts +0 -372
  611. package/templates/sveltekit/bun.lock +0 -1099
@@ -1,255 +0,0 @@
1
- import {
2
- GetResourcesCommand,
3
- ResourceGroupsTaggingAPIClient,
4
- } from "@aws-sdk/client-resource-groups-tagging-api";
5
- import {
6
- CreateBucketCommand,
7
- PutBucketTaggingCommand,
8
- S3Client,
9
- } from "@aws-sdk/client-s3";
10
- import { loadConfig } from "@smithy/node-config-provider";
11
-
12
- export interface BootstrapS3Options {
13
- region?: string;
14
- prefix?: string;
15
- help?: boolean;
16
- }
17
-
18
- const BOOTSTRAP_TAG_KEY = "alchemy:bootstrap";
19
- const BOOTSTRAP_TAG_VALUE = "s3-state-store";
20
-
21
- /**
22
- * Generate a random suffix for bucket names to avoid conflicts
23
- */
24
- function generateRandomSuffix(): string {
25
- return Math.random().toString(36).substring(2, 8);
26
- }
27
-
28
- /**
29
- * Find existing bootstrap bucket by checking tags using Resource Groups API
30
- */
31
- async function findExistingBootstrapBucket(
32
- region: string,
33
- prefix: string,
34
- ): Promise<string | null> {
35
- try {
36
- const resourceGroupsClient = new ResourceGroupsTaggingAPIClient({ region });
37
-
38
- const result = await resourceGroupsClient.send(
39
- new GetResourcesCommand({
40
- ResourceTypeFilters: ["s3:bucket"],
41
- TagFilters: [
42
- {
43
- Key: BOOTSTRAP_TAG_KEY,
44
- Values: [BOOTSTRAP_TAG_VALUE],
45
- },
46
- ],
47
- }),
48
- );
49
-
50
- if (!result.ResourceTagMappingList) {
51
- return null;
52
- }
53
-
54
- // Find a bucket that matches our prefix
55
- for (const resource of result.ResourceTagMappingList) {
56
- if (resource.ResourceARN) {
57
- // Extract bucket name from ARN: arn:aws:s3:::bucket-name
58
- const bucketName = resource.ResourceARN.split(":::")[1];
59
- if (bucketName?.startsWith(prefix)) {
60
- return bucketName;
61
- }
62
- }
63
- }
64
- } catch (error: any) {
65
- console.error("Error finding bootstrap buckets:", error.message);
66
- return null;
67
- }
68
-
69
- return null;
70
- }
71
-
72
- /**
73
- * Create a new S3 bucket with bootstrap tags
74
- */
75
- async function createBootstrapBucket(
76
- s3Client: S3Client,
77
- bucketName: string,
78
- ): Promise<void> {
79
- try {
80
- // Create the bucket
81
- const createCommand = new CreateBucketCommand({
82
- Bucket: bucketName,
83
- });
84
-
85
- await s3Client.send(createCommand);
86
- console.log(`✅ Created S3 bucket: ${bucketName}`);
87
-
88
- // Add bootstrap tags
89
- await s3Client.send(
90
- new PutBucketTaggingCommand({
91
- Bucket: bucketName,
92
- Tagging: {
93
- TagSet: [
94
- {
95
- Key: BOOTSTRAP_TAG_KEY,
96
- Value: BOOTSTRAP_TAG_VALUE,
97
- },
98
- {
99
- Key: "Purpose",
100
- Value: "Alchemy state storage",
101
- },
102
- {
103
- Key: "CreatedBy",
104
- Value: "alchemy-cli",
105
- },
106
- ],
107
- },
108
- }),
109
- );
110
-
111
- console.log("✅ Tagged bucket with bootstrap markers");
112
- } catch (error: any) {
113
- if (error.name === "BucketAlreadyExists") {
114
- throw new Error(
115
- `Bucket name '${bucketName}' is already taken. Please try again to generate a new random suffix.`,
116
- );
117
- } else if (error.name === "BucketAlreadyOwnedByYou") {
118
- console.log(`✅ Bucket ${bucketName} already exists and is owned by you`);
119
-
120
- // Still add tags if they're missing
121
- try {
122
- await s3Client.send(
123
- new PutBucketTaggingCommand({
124
- Bucket: bucketName,
125
- Tagging: {
126
- TagSet: [
127
- {
128
- Key: BOOTSTRAP_TAG_KEY,
129
- Value: BOOTSTRAP_TAG_VALUE,
130
- },
131
- {
132
- Key: "Purpose",
133
- Value: "Alchemy state storage",
134
- },
135
- {
136
- Key: "CreatedBy",
137
- Value: "alchemy-cli",
138
- },
139
- ],
140
- },
141
- }),
142
- );
143
- console.log("✅ Added bootstrap tags to existing bucket");
144
- } catch (tagError: any) {
145
- throw new Error(
146
- `Failed to tag existing bucket '${bucketName}': ${tagError.message}`,
147
- );
148
- }
149
- } else {
150
- throw error;
151
- }
152
- }
153
- }
154
-
155
- /**
156
- * Get the default AWS region from the current profile/configuration
157
- */
158
- async function getDefaultRegion(): Promise<string> {
159
- try {
160
- const regionProvider = loadConfig({
161
- environmentVariableSelector: (env) =>
162
- env.AWS_REGION || env.AWS_DEFAULT_REGION,
163
- configFileSelector: (profile) => profile.region,
164
- default: "us-east-1",
165
- });
166
-
167
- return await regionProvider();
168
- } catch (_error) {
169
- return "us-east-1"; // Default fallback
170
- }
171
- }
172
-
173
- /**
174
- * Bootstrap S3 bucket for Alchemy state storage
175
- */
176
- export async function bootstrapS3(options: BootstrapS3Options): Promise<void> {
177
- if (options.help) {
178
- console.log(`
179
- Usage: alchemy bootstrap s3 [options]
180
-
181
- Create an S3 bucket for Alchemy state storage with proper tagging.
182
-
183
- Options:
184
- --region AWS region (defaults to AWS profile default: us-east-1)
185
- --prefix S3 bucket name prefix (default: alchemy-state)
186
- --help Show this help message
187
-
188
- Examples:
189
- alchemy bootstrap s3 # Use defaults
190
- alchemy bootstrap s3 --region us-west-2 # Specify region
191
- alchemy bootstrap s3 --prefix my-app-state # Custom prefix
192
- alchemy bootstrap s3 --region eu-west-1 --prefix app # Both options
193
-
194
- The created bucket will be tagged with 'alchemy:bootstrap=s3-state-store' to
195
- identify it for future bootstrap operations and avoid creating duplicates.
196
- `);
197
- return;
198
- }
199
-
200
- const prefix = options.prefix || "alchemy-state";
201
- const region = options.region || (await getDefaultRegion());
202
-
203
- console.log("🚀 Bootstrapping S3 state storage...");
204
- console.log(` Region: ${region}`);
205
- console.log(` Prefix: ${prefix}`);
206
-
207
- // Initialize S3 client
208
- const s3Client = new S3Client({
209
- region,
210
- });
211
-
212
- try {
213
- // Check for existing bootstrap bucket
214
- const existingBucket = await findExistingBootstrapBucket(region, prefix);
215
-
216
- if (existingBucket) {
217
- console.log(`✅ Found existing bootstrap bucket: ${existingBucket}`);
218
- console.log("\n📝 To use this bucket in your alchemy.run.ts file:\n");
219
- console.log(`import { S3StateStore } from "alchemy/aws";`);
220
- console.log("\nconst stateStore = new S3StateStore(scope, {");
221
- console.log(` bucketName: "${existingBucket}",`);
222
- console.log(` region: "${region}",`);
223
- console.log("});\n");
224
- return;
225
- }
226
-
227
- // Generate a new bucket name with random suffix
228
- const bucketName = `${prefix}-${generateRandomSuffix()}`;
229
- console.log(`📦 Creating new bucket: ${bucketName}`);
230
-
231
- // Create the bucket
232
- await createBootstrapBucket(s3Client, bucketName);
233
-
234
- console.log("\n🎉 Bootstrap complete!");
235
- console.log("\n📝 To use this bucket in your alchemy.run.ts file:\n");
236
- console.log(`import { S3StateStore } from "alchemy/aws";`);
237
- console.log("\nconst stateStore = new S3StateStore(scope, {");
238
- console.log(` bucketName: "${bucketName}",`);
239
- console.log(` region: "${region}",`);
240
- console.log("});\n");
241
- } catch (error: any) {
242
- console.error(`❌ Failed to bootstrap S3: ${error.message}`);
243
-
244
- if (error.message?.includes("credentials")) {
245
- console.error("\n💡 Make sure your AWS credentials are configured:");
246
- console.error(` - Run 'aws configure' to set up credentials`);
247
- console.error(
248
- " - Or set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables",
249
- );
250
- console.error(" - Or use IAM roles if running on EC2/Lambda");
251
- }
252
-
253
- process.exit(1);
254
- }
255
- }
package/lib/ai/ark.d.ts DELETED
@@ -1,12 +0,0 @@
1
- import { type Tool as AITool, type Schema, type ToolExecutionOptions } from "ai";
2
- import { type JsonSchema, type type } from "arktype";
3
- export declare namespace ark {
4
- function schema<T>(type: JsonSchema): Schema<T>;
5
- interface Tool<Input extends type, Output> extends Omit<AITool<Schema<type.infer<Input>>>, "parameters" | "execute"> {
6
- description?: string;
7
- parameters: Input;
8
- execute: (input: type.infer<Input>, options: ToolExecutionOptions) => Promise<Output>;
9
- }
10
- function tool<Input extends type, Output>(tool: Tool<Input, Output>): AITool<Schema<type.infer<Input>>, Output>;
11
- }
12
- //# sourceMappingURL=ark.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ark.d.ts","sourceRoot":"","sources":["../../src/ai/ark.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,IAAI,MAAM,EACnB,KAAK,MAAM,EACX,KAAK,oBAAoB,EAG1B,MAAM,IAAI,CAAC;AACZ,OAAO,EAAa,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAEhE,yBAAiB,GAAG,CAAC;IACnB,SAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAyFvD,UAAiB,IAAI,CAAC,KAAK,SAAS,IAAI,EAAE,MAAM,CAC9C,SAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;QACzE,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,KAAK,CAAC;QAClB,OAAO,EAAE,CACP,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACxB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CAAC,MAAM,CAAC,CAAC;KACtB;IAED,SAAgB,IAAI,CAAC,KAAK,SAAS,IAAI,EAAE,MAAM,EAC7C,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAK3C;CACF"}
package/lib/ai/ark.js DELETED
@@ -1,87 +0,0 @@
1
- import { tool as aitool, jsonSchema, } from "ai";
2
- import { ArkErrors } from "arktype";
3
- export var ark;
4
- (function (ark) {
5
- function schema(type) {
6
- const jsonSchemaObj = type.toJsonSchema();
7
- const processedSchema = processSchema(jsonSchemaObj);
8
- return jsonSchema(processedSchema, {
9
- validate: (value) => {
10
- const out = type(value);
11
- if (out instanceof ArkErrors) {
12
- return {
13
- success: false,
14
- error: new Error(out.summary),
15
- };
16
- }
17
- return {
18
- success: true,
19
- value: out,
20
- };
21
- },
22
- });
23
- }
24
- ark.schema = schema;
25
- /**
26
- * Recursively processes a JSON schema and sets additionalProperties: false
27
- * for any object types.
28
- *
29
- * Structured Outputs requires additionalProperties: false
30
- */
31
- function processSchema(schema) {
32
- if (!schema || typeof schema !== "object")
33
- return schema;
34
- // Create a copy to avoid mutating the original
35
- const result = { ...schema };
36
- // Convert anyOf with all const values to enum
37
- if (result.anyOf && Array.isArray(result.anyOf)) {
38
- const allConst = result.anyOf.every((item) => item && typeof item === "object" && "const" in item);
39
- if (allConst) {
40
- // Extract all const values
41
- const enumValues = result.anyOf.map((item) => item.const);
42
- // Determine the type based on the first const value
43
- // Assuming all const values are of the same type
44
- const firstType = typeof enumValues[0];
45
- // Replace anyOf with enum
46
- delete result.anyOf;
47
- result.type = firstType;
48
- result.enum = enumValues;
49
- }
50
- else {
51
- // Process each item in anyOf
52
- result.anyOf = result.anyOf.map(processSchema);
53
- }
54
- }
55
- // If this is an object type, set additionalProperties: false
56
- if (result.type === "object") {
57
- result.additionalProperties = false;
58
- result.properties ??= {};
59
- }
60
- // Process properties of objects
61
- if (result.properties && typeof result.properties === "object") {
62
- result.properties = Object.fromEntries(Object.entries(result.properties).map(([key, value]) => [
63
- key,
64
- processSchema(value),
65
- ]));
66
- }
67
- // Process items in arrays
68
- if (result.items) {
69
- result.items = processSchema(result.items);
70
- }
71
- // Process allOf, oneOf
72
- for (const key of ["allOf", "oneOf"]) {
73
- if (Array.isArray(result[key])) {
74
- result[key] = result[key].map(processSchema);
75
- }
76
- }
77
- return result;
78
- }
79
- function tool(tool) {
80
- return aitool({
81
- ...tool,
82
- parameters: ark.schema(tool.parameters),
83
- });
84
- }
85
- ark.tool = tool;
86
- })(ark || (ark = {}));
87
- //# sourceMappingURL=ark.js.map
package/lib/ai/ark.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"ark.js","sourceRoot":"","sources":["../../src/ai/ark.ts"],"names":[],"mappings":"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"}
@@ -1,138 +0,0 @@
1
- import prettier from "prettier";
2
- import type { Context } from "../context.ts";
3
- import { Resource } from "../resource.ts";
4
- import type { Secret } from "../secret.ts";
5
- import { type ModelConfig } from "./client.ts";
6
- /**
7
- * Properties for creating or updating an AstroFile
8
- */
9
- export interface AstroFileProps {
10
- /**
11
- * Path to the Astro file
12
- */
13
- path: string;
14
- /**
15
- * Base URL for the OpenAI API
16
- * @default 'https://api.openai.com/v1'
17
- */
18
- baseURL?: string;
19
- /**
20
- * Prompt for generating content
21
- * Use alchemy template literals to include file context:
22
- * @example
23
- * prompt: await alchemy`
24
- * Generate an Astro component using:
25
- * ${alchemy.file("src/types.ts")}
26
- * `
27
- */
28
- prompt: string;
29
- /**
30
- * System prompt for the model
31
- * This is used to provide instructions to the model about how to format the response
32
- * The default system prompt instructs the model to return Astro code inside ```astro fences
33
- * @default "You are an Astro component generator. Create Astro components based on the user's requirements. Your response MUST include only Astro code inside ```astro fences. Do not include any other text, explanations, or multiple code blocks."
34
- */
35
- system?: string;
36
- /**
37
- * OpenAI API key to use for generating content
38
- * If not provided, will use OPENAI_API_KEY environment variable
39
- */
40
- apiKey?: Secret;
41
- /**
42
- * Model configuration
43
- */
44
- model?: ModelConfig;
45
- /**
46
- * Temperature for controlling randomness in generation.
47
- * Higher values (e.g., 0.8) make output more random,
48
- * lower values (e.g., 0.2) make it more deterministic.
49
- * @default 0.7
50
- */
51
- temperature?: number;
52
- /**
53
- * Prettier configuration to use for formatting the Astro code
54
- * If not provided, will use the default Prettier configuration
55
- */
56
- prettierConfig?: prettier.Options;
57
- }
58
- /**
59
- * An Astro file that can be created, updated, and deleted
60
- */
61
- export interface AstroFile extends AstroFileProps, Resource<"ai::AstroFile"> {
62
- /**
63
- * Content of the Astro file
64
- */
65
- content: string;
66
- /**
67
- * Time at which the file was created
68
- */
69
- createdAt: number;
70
- /**
71
- * Time at which the file was last updated
72
- */
73
- updatedAt: number;
74
- }
75
- /**
76
- * Resource for generating Astro files using AI models.
77
- * Extracts Astro code from between ```astro fences, validates the response,
78
- * and formats the code with Prettier.
79
- *
80
- * @example
81
- * // Create a simple Astro component
82
- * const header = await AstroFile("header", {
83
- * path: "./src/components/Header.astro",
84
- * prompt: await alchemy`
85
- * Generate an Astro header component with:
86
- * - Site logo
87
- * - Navigation menu with Home, About, Services, Contact links
88
- * - Mobile responsive design
89
- * - Dark/light mode toggle
90
- * `,
91
- * model: {
92
- * id: "gpt-4o",
93
- * provider: "openai"
94
- * }
95
- * });
96
- *
97
- * @example
98
- * // Generate an Astro page with data fetching
99
- * const blogPost = await AstroFile("blog-post", {
100
- * path: "./src/pages/blog/[slug].astro",
101
- * prompt: await alchemy`
102
- * Create an Astro blog post page that:
103
- * - Uses getStaticPaths to generate pages from a CMS
104
- * - Renders markdown content
105
- * - Includes author info, publication date, and related posts
106
- * - Has social sharing buttons
107
- *
108
- * Use the following types:
109
- * ${alchemy.file("src/types/Blog.ts")}
110
- * `,
111
- * temperature: 0.2,
112
- * prettierConfig: {
113
- * semi: false,
114
- * singleQuote: true,
115
- * printWidth: 120
116
- * }
117
- * });
118
- *
119
- * @example
120
- * // Generate a layout with custom system prompt
121
- * const mainLayout = await AstroFile("main-layout", {
122
- * path: "./src/layouts/MainLayout.astro",
123
- * prompt: await alchemy`
124
- * Create the main layout for an Astro site that:
125
- * - Includes common head metadata and SEO optimization
126
- * - Has slots for page content, header, and footer
127
- * - Imports and uses the Header and Footer components
128
- * - Sets up viewport and responsive configurations
129
- * `,
130
- * system: "You are an expert Astro developer. Create a single Astro layout file inside ```astro fences with no additional text. Follow Astro best practices and include proper typing in the frontmatter section.",
131
- * model: {
132
- * id: "claude-3-opus-20240229",
133
- * provider: "anthropic"
134
- * }
135
- * });
136
- */
137
- export declare const AstroFile: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<AstroFile>, _id: string, props: AstroFileProps) => Promise<AstroFile>);
138
- //# sourceMappingURL=astro-file.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"astro-file.d.ts","sourceRoot":"","sources":["../../src/ai/astro-file.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,aAAa,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;OAQG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IAEpB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,cAAc,EAAE,QAAQ,CAAC,eAAe,CAAC;IAC1E;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAQD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,eAAO,MAAM,SAAS,yFAGZ,OAAO,CAAC,SAAS,CAAC,OACnB,MAAM,SACJ,cAAc,KACpB,OAAO,CAAC,SAAS,CAAC,CA0EtB,CAAC"}
@@ -1,158 +0,0 @@
1
- import { generateText } from "ai";
2
- import prettier from "prettier";
3
- import { StaticAstroFile } from "../fs/static-astro-file.js";
4
- import { Resource } from "../resource.js";
5
- import { logger } from "../util/logger.js";
6
- import { createModel } from "./client.js";
7
- /**
8
- * Default system prompt for Astro file generation
9
- */
10
- const DEFAULT_ASTRO_SYSTEM_PROMPT = "You are an Astro component generator. Create Astro components based on the user's requirements. Your response MUST include only Astro code inside ```astro fences. Do not include any other text, explanations, or multiple code blocks.";
11
- /**
12
- * Resource for generating Astro files using AI models.
13
- * Extracts Astro code from between ```astro fences, validates the response,
14
- * and formats the code with Prettier.
15
- *
16
- * @example
17
- * // Create a simple Astro component
18
- * const header = await AstroFile("header", {
19
- * path: "./src/components/Header.astro",
20
- * prompt: await alchemy`
21
- * Generate an Astro header component with:
22
- * - Site logo
23
- * - Navigation menu with Home, About, Services, Contact links
24
- * - Mobile responsive design
25
- * - Dark/light mode toggle
26
- * `,
27
- * model: {
28
- * id: "gpt-4o",
29
- * provider: "openai"
30
- * }
31
- * });
32
- *
33
- * @example
34
- * // Generate an Astro page with data fetching
35
- * const blogPost = await AstroFile("blog-post", {
36
- * path: "./src/pages/blog/[slug].astro",
37
- * prompt: await alchemy`
38
- * Create an Astro blog post page that:
39
- * - Uses getStaticPaths to generate pages from a CMS
40
- * - Renders markdown content
41
- * - Includes author info, publication date, and related posts
42
- * - Has social sharing buttons
43
- *
44
- * Use the following types:
45
- * ${alchemy.file("src/types/Blog.ts")}
46
- * `,
47
- * temperature: 0.2,
48
- * prettierConfig: {
49
- * semi: false,
50
- * singleQuote: true,
51
- * printWidth: 120
52
- * }
53
- * });
54
- *
55
- * @example
56
- * // Generate a layout with custom system prompt
57
- * const mainLayout = await AstroFile("main-layout", {
58
- * path: "./src/layouts/MainLayout.astro",
59
- * prompt: await alchemy`
60
- * Create the main layout for an Astro site that:
61
- * - Includes common head metadata and SEO optimization
62
- * - Has slots for page content, header, and footer
63
- * - Imports and uses the Header and Footer components
64
- * - Sets up viewport and responsive configurations
65
- * `,
66
- * system: "You are an expert Astro developer. Create a single Astro layout file inside ```astro fences with no additional text. Follow Astro best practices and include proper typing in the frontmatter section.",
67
- * model: {
68
- * id: "claude-3-opus-20240229",
69
- * provider: "anthropic"
70
- * }
71
- * });
72
- */
73
- export const AstroFile = Resource("ai::AstroFile", async function (_id, props) {
74
- // Handle deletion phase
75
- if (this.phase === "delete") {
76
- return this.destroy();
77
- }
78
- // Use provided system prompt or default
79
- const system = props.system || DEFAULT_ASTRO_SYSTEM_PROMPT;
80
- // Generate initial content
81
- const { text } = await generateText({
82
- model: createModel(props),
83
- prompt: props.prompt,
84
- system,
85
- providerOptions: props.model?.options,
86
- ...(props.temperature === undefined
87
- ? {}
88
- : { temperature: props.temperature }),
89
- });
90
- // Extract and validate Astro code
91
- let { code, error } = await extractAstroCode(text);
92
- // Re-prompt if there are validation errors
93
- if (error) {
94
- const errorSystem = `${system}\n\nERROR: ${error}\n\nPlease try again and ensure your response contains exactly one Astro code block inside \`\`\`astro fences.`;
95
- const { text: retryText } = await generateText({
96
- model: createModel(props),
97
- prompt: props.prompt,
98
- system: errorSystem,
99
- providerOptions: props.model?.options,
100
- ...(props.temperature === undefined
101
- ? {}
102
- : { temperature: props.temperature }),
103
- });
104
- const retryResult = await extractAstroCode(retryText);
105
- if (retryResult.error) {
106
- throw new Error(`Failed to generate valid Astro code: ${retryResult.error}`);
107
- }
108
- code = retryResult.code;
109
- }
110
- // Format the code with Prettier
111
- try {
112
- // Set default parser to astro
113
- const prettierOptions = {
114
- parser: "astro",
115
- ...props.prettierConfig,
116
- };
117
- // Format the code
118
- code = await prettier.format(code, prettierOptions);
119
- }
120
- catch (error) {
121
- // If Prettier formatting fails, just use the unformatted code
122
- logger.warn("Failed to format Astro code with Prettier:", error);
123
- }
124
- // Use StaticAstroFile to create/update the file
125
- const file = await StaticAstroFile("file", props.path, code);
126
- // Return the resource
127
- return this({
128
- ...props,
129
- content: file.content,
130
- createdAt: Date.now(),
131
- updatedAt: Date.now(),
132
- });
133
- });
134
- /**
135
- * Extracts Astro code from between ```astro fences
136
- * Validates that exactly one Astro code block exists
137
- *
138
- * @param text The text to extract Astro code from
139
- * @returns The extracted Astro code or error message
140
- */
141
- async function extractAstroCode(text) {
142
- const astroCodeRegex = /```astro\s*([\s\S]*?)```/g;
143
- const matches = Array.from(text.matchAll(astroCodeRegex));
144
- if (matches.length === 0) {
145
- return {
146
- code: "",
147
- error: "No Astro code block found in the response. Please include your code within ```astro fences.",
148
- };
149
- }
150
- if (matches.length > 1) {
151
- return {
152
- code: "",
153
- error: "Multiple Astro code blocks found in the response. Please provide exactly one code block within ```astro fences.",
154
- };
155
- }
156
- return { code: matches[0][1].trim() };
157
- }
158
- //# sourceMappingURL=astro-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"astro-file.js","sourceRoot":"","sources":["../../src/ai/astro-file.ts"],"names":[],"mappings":"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"}