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,38 +0,0 @@
1
- import { File } from "./file.ts";
2
-
3
- /**
4
- * Creates a JSON file with formatted content
5
- *
6
- * @example
7
- * // Create a JSON configuration file
8
- * const config = await StaticJsonFile("config.json", {
9
- * api: {
10
- * endpoint: "https://api.example.com",
11
- * version: "v1"
12
- * },
13
- * features: ["auth", "logging"]
14
- * });
15
- */
16
- export type StaticJsonFile = File;
17
-
18
- export async function StaticJsonFile(
19
- id: string,
20
- ...args: [content: any] | [path: string, content: any]
21
- ): Promise<StaticJsonFile> {
22
- const [path, content] = args.length === 1 ? [id, args[0]] : args;
23
- return File(id, {
24
- path,
25
- content: await formatJson(content),
26
- });
27
- }
28
-
29
- export async function formatJson(content: any) {
30
- const prettier = await import("prettier");
31
- return prettier.format(JSON.stringify(content), {
32
- parser: "json",
33
- editor: {
34
- tabWidth: 2,
35
- indentWidth: 2,
36
- },
37
- });
38
- }
@@ -1,23 +0,0 @@
1
- import { File } from "./file.ts";
2
-
3
- /**
4
- * Creates a plain text file
5
- *
6
- * @example
7
- * // Create a text file with content
8
- * const readme = await TextFile("README.md",
9
- * "# Project Name\n\nProject description goes here."
10
- * );
11
- */
12
- export type StaticTextFile = File;
13
-
14
- export function StaticTextFile(
15
- id: string,
16
- ...args: [content: string] | [path: string, content: string]
17
- ): Promise<StaticTextFile> {
18
- const [path, content] = args.length === 1 ? [id, args[0]] : args;
19
- return File(id, {
20
- path,
21
- content,
22
- });
23
- }
@@ -1,37 +0,0 @@
1
- import { File } from "./file.ts";
2
-
3
- /**
4
- * Creates a TypeScript file with formatted content using prettier
5
- *
6
- * @example
7
- * // Create a TypeScript file
8
- * const component = await StaticTypeScriptFile("Component.ts", `
9
- * interface Props {
10
- * name: string;
11
- * age: number;
12
- * }
13
- *
14
- * export function Component({ name, age }: Props) {
15
- * return <div>Hello {name}, you are {age} years old</div>;
16
- * }
17
- * `);
18
- */
19
- export type StaticTypeScriptFile = File;
20
-
21
- export async function StaticTypeScriptFile(
22
- id: string,
23
- ...args: [content: string] | [path: string, content: string]
24
- ): Promise<StaticTypeScriptFile> {
25
- const [path, content] = args.length === 1 ? [id, args[0]] : args;
26
- const prettier = await import("prettier");
27
- return File(id, {
28
- path,
29
- content: await prettier.format(content, {
30
- parser: "typescript",
31
- editor: {
32
- tabWidth: 2,
33
- indentWidth: 2,
34
- },
35
- }),
36
- });
37
- }
@@ -1,39 +0,0 @@
1
- import { File } from "./file.ts";
2
-
3
- export type StaticVueFile = File;
4
-
5
- /**
6
- * Creates a static Vue component file
7
- *
8
- * @example
9
- * // Create a Vue component file with content
10
- * const button = await StaticVueFile("Button.vue",
11
- * `<template>
12
- * <button class="btn">{{ text }}</button>
13
- * </template>
14
- *
15
- * <script>
16
- * export default {
17
- * props: {
18
- * text: String
19
- * }
20
- * }
21
- * </script>
22
- *
23
- * <style>
24
- * .btn {
25
- * padding: 0.5rem 1rem;
26
- * }
27
- * </style>`
28
- * );
29
- */
30
- export function StaticVueFile(
31
- id: string,
32
- ...args: [content: string] | [path: string, content: string]
33
- ): Promise<StaticVueFile> {
34
- const [path, content] = args.length === 1 ? [id, args[0]] : args;
35
- return File(id, {
36
- path,
37
- content,
38
- });
39
- }
@@ -1,33 +0,0 @@
1
- import { File } from "./file.ts";
2
- /**
3
- * Creates a YAML file with formatted content
4
- *
5
- * @example
6
- * // Create a YAML configuration file
7
- * const config = await StaticYamlFile("config.yaml", {
8
- * server: {
9
- * host: "localhost",
10
- * port: 3000
11
- * },
12
- * database: {
13
- * url: "postgresql://localhost:5432/db",
14
- * pool: {
15
- * min: 1,
16
- * max: 10
17
- * }
18
- * }
19
- * });
20
- */
21
- export type StaticYamlFile = File;
22
-
23
- export async function StaticYamlFile(
24
- id: string,
25
- ...args: [content: any] | [path: string, content: any]
26
- ): Promise<StaticYamlFile> {
27
- const [path, content] = args.length === 1 ? [id, args[0]] : args;
28
- const yaml = await import("yaml");
29
- return File(id, {
30
- path,
31
- content: yaml.stringify(content),
32
- });
33
- }
@@ -1,286 +0,0 @@
1
- import { type } from "arktype";
2
- import fs from "node:fs/promises";
3
- import path from "node:path";
4
- import { Data } from "../../ai/data.ts";
5
- import { Document } from "../../ai/document.ts";
6
- import { alchemy } from "../../alchemy.ts";
7
- import { Folder } from "../../fs/folder.ts";
8
-
9
- function getArg(arg: string) {
10
- const idx = process.argv.findIndex((a) => a === arg);
11
- return idx > -1 ? process.argv[idx + 1] : undefined;
12
- }
13
-
14
- const onlyProviderName = getArg("--provider");
15
- const onlyResourceName = getArg("--resource");
16
-
17
- export interface DocsProps {
18
- /**
19
- * The output directory for the docs.
20
- */
21
- outDir: string | Folder;
22
-
23
- /**
24
- * The source directory for the docs.
25
- */
26
- srcDir: string;
27
-
28
- /**
29
- * Whether to filter the docs.
30
- * If true, include all docs.
31
- * If false, include none.
32
- * If a number, include that many providers.
33
- *
34
- * @default true (all docs)
35
- */
36
- filter?: boolean | number;
37
-
38
- /**
39
- * Whether to run in parallel.
40
- *
41
- * @default true
42
- */
43
- parallel?: boolean;
44
- }
45
-
46
- export type Providers = {
47
- dir: string;
48
- provider: string;
49
- documents: Document[];
50
- }[];
51
-
52
- export async function Providers({
53
- srcDir,
54
- outDir,
55
- // filter,
56
- parallel = true,
57
- }: DocsProps): Promise<Providers> {
58
- outDir = typeof outDir === "string" ? outDir : outDir.path;
59
-
60
- const exclude = [
61
- "util",
62
- "test",
63
- "vitepress",
64
- "vite",
65
- "shadcn",
66
- "internal",
67
- "web",
68
- ];
69
-
70
- // Get all folders in the alchemy/src directory
71
- const providers = (
72
- await fs.readdir(srcDir, {
73
- withFileTypes: true,
74
- })
75
- )
76
- .filter((dirent) => dirent.isDirectory() && !exclude.includes(dirent.name))
77
- .map((dirent) => path.join(dirent.parentPath, dirent.name));
78
-
79
- if (parallel) {
80
- return await Promise.all(
81
- providers.map((provider) =>
82
- generateProviderDocs({ provider, outDir, parallel }),
83
- ),
84
- );
85
- }
86
- const generatedProviders = [];
87
- for (const provider of providers) {
88
- generatedProviders.push(
89
- await generateProviderDocs({ provider, outDir, parallel }),
90
- );
91
- }
92
- return generatedProviders;
93
- }
94
-
95
- async function generateProviderDocs({
96
- provider,
97
- outDir,
98
- parallel,
99
- }: {
100
- provider: string;
101
- outDir: string;
102
- parallel: boolean;
103
- }) {
104
- const providerName = path.basename(provider);
105
- const files = (
106
- await fs.readdir(path.resolve(provider), {
107
- withFileTypes: true,
108
- })
109
- )
110
- .filter((dirent) => dirent.isFile())
111
- .map((dirent) =>
112
- path.relative(process.cwd(), path.resolve(provider, dirent.name)),
113
- )
114
- .filter((file) => file.endsWith(".ts") && !file.endsWith("index.ts"));
115
-
116
- type Group = (typeof groups)[number];
117
-
118
- const {
119
- object: { groups },
120
- } = await Data(`docs/${providerName}`, {
121
- model: {
122
- id: "o3-mini",
123
- provider: "openai",
124
- options: {
125
- reasoningEffort: "high",
126
- },
127
- },
128
- freeze: onlyProviderName === undefined || onlyProviderName !== providerName,
129
- temperature: 0.1,
130
- schema: type({
131
- groups: type({
132
- identifier: type("string").describe(
133
- "The identifier of the file's primary exported Resource/Function/Type, e.g. Bucket or StaticSite, AstroFile, TypeScriptFile",
134
- ),
135
- filename: type("string").describe(
136
- "The filename of the Resource's Document, e.g. bucket.md or static-site.md",
137
- ),
138
- category: type("'Resource'|'Client'|'Utility'|'Types'").describe(
139
- "The classification of the Resource's Document, one of: Resource, Client, Utility, or Types.",
140
- ),
141
- }).array(),
142
- }),
143
- system: await alchemy`
144
- You are a technical writer tasked with identifying the distinct documents that need to be written for a document group (folder) in a documentation site.
145
- You will be provided with a list of documents and instructions on how to classify them.
146
- Each document has a title, file name, and category.
147
- `,
148
- prompt: await alchemy`
149
- Identify and classify the documents that need to be written for the '${provider}' Service's Alchemy Resources.
150
- For background knowledge on Alchemy, see ${alchemy.file("./README.md")}.
151
- For background knowledge on the structure of an Alchemy Resource, see ${alchemy.file("./.cursorrules")}.
152
-
153
- The ${provider} Service has the following resources:
154
- ${alchemy.files(files)}
155
-
156
- A file is considered a "Resource" if it contains a const <ResourceName> = Resource(...) call or if it is a function that calls a Resource function, e.g. const TypeScriptFile = () => File(...), or it is the Workflow or DurableObject classes.
157
- A file is considered a "Client" if it exposes a wrapper around creating a SDK client or fetch.
158
- A file is considered a "Utility" if it contains utility functions that are not resources or clients.
159
- A file is considered a "Types" if it contains just type definitions and maybe helpers around working with those types.
160
-
161
- The title should be simply the name of the resource's const in code (with spaces added in between each word), e.g. "Bucket" or "Function", except with spaces, e.g. "StaticSite" for "const StaticSite". Maintain all other casing.
162
-
163
- // "Resource Name"
164
- const ResourceName = Resource(...)
165
- `,
166
- });
167
-
168
- const providerDocsDir = (await Folder(path.join(outDir, providerName))).path;
169
-
170
- let documents: Document[] = [];
171
- if (parallel) {
172
- documents = await Promise.all(
173
- groups.filter((g) => g.category === "Resource").map(generateDocument),
174
- );
175
- } else {
176
- for (const g of groups.filter((g) => g.category === "Resource")) {
177
- documents.push(await generateDocument(g));
178
- }
179
- }
180
-
181
- async function generateDocument(g: Group) {
182
- return Document(`docs/${providerName}/${g.identifier}`, {
183
- title: g.identifier,
184
- path: path.join(
185
- providerDocsDir,
186
- `${g.filename.replace(".ts", "").replace(".md", "")}.md`,
187
- ),
188
- freeze:
189
- onlyResourceName !== undefined && onlyResourceName !== g.identifier,
190
- model: {
191
- id: "claude-3-5-sonnet-latest",
192
- provider: "anthropic",
193
- // options: {
194
- // reasoningEffort: "high",
195
- // },
196
- },
197
- prompt: await alchemy`
198
- You are a technical writer writing API documentation for an Alchemy IaC Resource.
199
- See ${alchemy.file("./README.md")} to understand the overview of Alchemy.
200
- See ${alchemy.file("./.cursorrules")} to better understand the structure and convention of an Alchemy Resource.
201
-
202
- Documentation should be written in the mdx format for an Astro Starlight documentation site.
203
-
204
- Relevant files for the ${providerName} Service:
205
- ${alchemy.files(files)}
206
-
207
- Write concise documentation for the "${g.identifier}" Resource.
208
-
209
- > [!CAUTION]
210
- > Avoid the temptation to over explain or over describe. Focus on concise, simple, high value snippets. One heading and 0-1 descriptions per snippet.
211
-
212
- > [!TIP]
213
- > Make sure the examples follow a natural progression from the minimal example to logical next steps of how the Resource might be used.
214
-
215
- Each document must follow the following format:
216
-
217
- # ${g.identifier}
218
-
219
- (simple description with an external link to the provider's website)
220
- e.g.
221
- The Efs component lets you add [Amazon Elastic File System (EFS)](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) to your app.
222
-
223
- # Minimal Example
224
-
225
- (brief 1-2 sentences of what it does)
226
-
227
- \`\`\`ts
228
- import { ${g.identifier.replaceAll(" ", "")} } from "alchemy/${providerName}";
229
-
230
- (example)
231
- \`\`\`
232
-
233
- # (one heading per variation)
234
-
235
- (brief 1-2 sentences of what it does)
236
-
237
- \`\`\`ts
238
- import { ${g.identifier.replaceAll(" ", "")} } from "alchemy/${providerName}";
239
-
240
- (example)
241
- \`\`\`
242
-
243
- Before writing the document, think through:
244
- 1. What is the minimal, most common example use case for this resource?
245
- 2. What are the variations (e.g. combination of different options) that are also commonly used, e.g. specifying the memory size of a lambda function.
246
- 3. Make sure to draw from the examples and your understanding of Alchemy.
247
-
248
- Refer to alchemy docs to understand the context of how this documentation is consumed:
249
- - ${alchemy.file("./alchemy-web/docs/what-is-alchemy.md")}
250
- - ${alchemy.file("./alchemy-web/docs/getting-started.md")}
251
- - ${alchemy.folder("./alchemy-web/docs/concepts/")}
252
-
253
- ${
254
- providerName === "cloudflare"
255
- ? await alchemy`# Bind to a Worker
256
- (if it is a Cloudflare Resource)
257
-
258
- (brief 1-2 sentences of what it does)
259
-
260
- \`\`\`ts
261
- import { Worker, ${g.identifier.replaceAll(" ", "")} } from "alchemy/${providerName}";
262
-
263
- const myResource = await ${g.identifier.replaceAll(" ", "")}("my-resource", {
264
- // ...
265
- });
266
-
267
- await Worker("my-worker", {
268
- name: "my-worker",
269
- script: "console.log('Hello, world!')",
270
- bindings: {
271
- myResource,
272
- },
273
- });
274
- \`\`\``
275
- : ""
276
- }
277
- `,
278
- });
279
- }
280
-
281
- return {
282
- dir: providerDocsDir,
283
- provider: providerName,
284
- documents,
285
- };
286
- }
@@ -1,95 +0,0 @@
1
- import { isPromise } from "node:util/types";
2
- import type { Binding as CloudflareBinding } from "../cloudflare/bindings.ts";
3
- import type { Bound as CloudflareBound } from "../cloudflare/bound.ts";
4
- import { isWorkerStub } from "../cloudflare/worker-stub.ts";
5
- import { isWorker } from "../cloudflare/worker.ts";
6
- import { env } from "../env.ts";
7
- import { ResourceFQN, ResourceScope, type Resource } from "../resource.ts";
8
- import { isRuntime } from "./global.ts";
9
-
10
- /**
11
- * Get a Resource's Binding from the Environment.
12
- */
13
- export function getBinding<T extends Resource>(resource: T): Bound<T> {
14
- return env[getBindKey(resource)] as Bound<T>;
15
- }
16
-
17
- export function tryGetBinding<T extends Resource>(
18
- resource: T,
19
- ): Promise<Bound<T>> | undefined {
20
- if (isRuntime) {
21
- return getBinding(resource);
22
- }
23
- return undefined;
24
- }
25
-
26
- /**
27
- * Compute a unique key for where to store a Resource's Binding.
28
- */
29
- export function getBindKey(resource: Resource): string {
30
- if (isWorker(resource) || isWorkerStub(resource)) {
31
- return `worker:${resource.name}`;
32
- }
33
- const fqn = resource[ResourceFQN];
34
- const scope = resource[ResourceScope];
35
- const prefix = `${scope.appName}/${scope.stage}`;
36
- const key = fqn.slice(prefix.length + 1).replace(/[^a-zA-Z0-9-_]/g, "_");
37
- return key;
38
- }
39
-
40
- export type Bound<T> = T extends CloudflareBinding ? CloudflareBound<T> : T;
41
-
42
- /**
43
- * Create a lazy binding of a Resource to an environment that exposes the Resource's methods
44
- * throw a Proxy that delays initialization of the binding until the Resource's methods are accessed.
45
- *
46
- * This allows us to run the same code during build time and runtime.
47
- */
48
- export async function bind<T extends Resource>(
49
- resource: T | Promise<T>,
50
- options?: {
51
- reify?: (value: T, key: string) => Promise<Bound<T>>;
52
- /** @default true */
53
- bindThis?: boolean;
54
- },
55
- ): Promise<Bound<T>> {
56
- if (isPromise(resource)) {
57
- return resource.then((r) => bind(r, options)) as Promise<Bound<T>>;
58
- }
59
- let _runtime: [Bound<T>] | undefined;
60
- const runtime = async (): Promise<Bound<T>> =>
61
- (_runtime ??= [
62
- await (options?.reify
63
- ? options.reify(resource, getBindKey(resource))
64
- : getBinding(resource)),
65
- ])[0];
66
-
67
- return new Proxy(() => {}, {
68
- get: (target: any, prop: string) => {
69
- if (prop in target) {
70
- return (resource as T)[prop as keyof T];
71
- } else if (prop === "then" || prop === "catch" || prop === "finally") {
72
- return target[prop];
73
- }
74
- return async (...args: any[]) => {
75
- const rt: Bound<T> = await runtime();
76
- if (rt === undefined) {
77
- throw new Error(`Resource ${resource[ResourceFQN]} is not bound`);
78
- }
79
- const method = rt[prop as keyof Bound<T>];
80
- if (typeof method !== "function") {
81
- throw new Error(
82
- `Method ${prop} on '${resource[ResourceFQN]}' is not a function`,
83
- );
84
- }
85
- if (options?.bindThis !== false) {
86
- return method.bind(rt)(...args);
87
- }
88
- return method(...args);
89
- };
90
- },
91
- // apply: (target, thisArg, argArray) => {
92
- // return target(thisArg, ...argArray);
93
- // },
94
- }) as T & Bound<T>;
95
- }
@@ -1,10 +0,0 @@
1
- import type { SerializedScope } from "../serde.ts";
2
-
3
- declare global {
4
- const __ALCHEMY_WORKER_NAME__: string;
5
- const __ALCHEMY_RUNTIME__: true;
6
- const __ALCHEMY_SERIALIZED_SCOPE__: SerializedScope;
7
- }
8
-
9
- // __ALCHEMY_SERIALIZED_SCOPE__ is injected by esbuild when bundling a Worker
10
- export const isRuntime = typeof __ALCHEMY_RUNTIME__ !== "undefined";