alchemy 0.16.9 → 0.17.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 (429) hide show
  1. package/lib/ai/astro-file.d.ts +1 -1
  2. package/lib/ai/astro-file.d.ts.map +1 -1
  3. package/lib/ai/astro-file.js +1 -1
  4. package/lib/ai/astro-file.js.map +1 -1
  5. package/lib/ai/client.js +2 -2
  6. package/lib/ai/client.js.map +1 -1
  7. package/lib/ai/css-file.d.ts +1 -1
  8. package/lib/ai/css-file.d.ts.map +1 -1
  9. package/lib/ai/css-file.js +1 -1
  10. package/lib/ai/css-file.js.map +1 -1
  11. package/lib/ai/data.d.ts +1 -1
  12. package/lib/ai/data.d.ts.map +1 -1
  13. package/lib/ai/data.js +1 -1
  14. package/lib/ai/data.js.map +1 -1
  15. package/lib/ai/html-file.d.ts +1 -1
  16. package/lib/ai/html-file.d.ts.map +1 -1
  17. package/lib/ai/html-file.js +1 -1
  18. package/lib/ai/html-file.js.map +1 -1
  19. package/lib/ai/json-file.d.ts +1 -1
  20. package/lib/ai/json-file.d.ts.map +1 -1
  21. package/lib/ai/json-file.js +1 -1
  22. package/lib/ai/json-file.js.map +1 -1
  23. package/lib/ai/typescript-file.d.ts +1 -1
  24. package/lib/ai/typescript-file.d.ts.map +1 -1
  25. package/lib/ai/typescript-file.js +1 -1
  26. package/lib/ai/typescript-file.js.map +1 -1
  27. package/lib/ai/vue-file.d.ts +1 -1
  28. package/lib/ai/vue-file.d.ts.map +1 -1
  29. package/lib/ai/vue-file.js +1 -1
  30. package/lib/ai/vue-file.js.map +1 -1
  31. package/lib/ai/yaml-file.d.ts +1 -1
  32. package/lib/ai/yaml-file.d.ts.map +1 -1
  33. package/lib/ai/yaml-file.js +2 -2
  34. package/lib/ai/yaml-file.js.map +1 -1
  35. package/lib/alchemy.d.ts +4 -0
  36. package/lib/alchemy.d.ts.map +1 -1
  37. package/lib/alchemy.js +14 -4
  38. package/lib/alchemy.js.map +1 -1
  39. package/lib/apply.d.ts +2 -0
  40. package/lib/apply.d.ts.map +1 -1
  41. package/lib/apply.js +17 -2
  42. package/lib/apply.js.map +1 -1
  43. package/lib/aws/bucket.d.ts +1 -1
  44. package/lib/aws/bucket.d.ts.map +1 -1
  45. package/lib/aws/bucket.js +1 -1
  46. package/lib/aws/bucket.js.map +1 -1
  47. package/lib/aws/function.d.ts +1 -1
  48. package/lib/aws/function.d.ts.map +1 -1
  49. package/lib/aws/function.js +2 -2
  50. package/lib/aws/function.js.map +1 -1
  51. package/lib/aws/oidc/oidc-provider.d.ts +1 -1
  52. package/lib/aws/oidc/oidc-provider.d.ts.map +1 -1
  53. package/lib/aws/oidc/oidc-provider.js +1 -1
  54. package/lib/aws/oidc/oidc-provider.js.map +1 -1
  55. package/lib/aws/policy-attachment.d.ts +1 -1
  56. package/lib/aws/policy-attachment.d.ts.map +1 -1
  57. package/lib/aws/policy-attachment.js +1 -1
  58. package/lib/aws/policy-attachment.js.map +1 -1
  59. package/lib/aws/policy.d.ts +1 -1
  60. package/lib/aws/policy.d.ts.map +1 -1
  61. package/lib/aws/policy.js +1 -1
  62. package/lib/aws/policy.js.map +1 -1
  63. package/lib/aws/queue.d.ts +1 -1
  64. package/lib/aws/queue.d.ts.map +1 -1
  65. package/lib/aws/queue.js +20 -25
  66. package/lib/aws/queue.js.map +1 -1
  67. package/lib/aws/role.d.ts +1 -1
  68. package/lib/aws/role.d.ts.map +1 -1
  69. package/lib/aws/role.js +1 -1
  70. package/lib/aws/role.js.map +1 -1
  71. package/lib/aws/ses.d.ts +1 -1
  72. package/lib/aws/ses.d.ts.map +1 -1
  73. package/lib/aws/ses.js +1 -1
  74. package/lib/aws/ses.js.map +1 -1
  75. package/lib/aws/table.d.ts +1 -1
  76. package/lib/aws/table.d.ts.map +1 -1
  77. package/lib/aws/table.js +1 -1
  78. package/lib/aws/table.js.map +1 -1
  79. package/lib/cloudflare/account-api-token.d.ts +1 -1
  80. package/lib/cloudflare/account-api-token.d.ts.map +1 -1
  81. package/lib/cloudflare/account-api-token.js +1 -1
  82. package/lib/cloudflare/account-api-token.js.map +1 -1
  83. package/lib/cloudflare/ai-gateway.d.ts +4 -3
  84. package/lib/cloudflare/ai-gateway.d.ts.map +1 -1
  85. package/lib/cloudflare/ai-gateway.js +13 -1
  86. package/lib/cloudflare/ai-gateway.js.map +1 -1
  87. package/lib/cloudflare/analytics-engine.d.ts +21 -0
  88. package/lib/cloudflare/analytics-engine.d.ts.map +1 -0
  89. package/lib/cloudflare/analytics-engine.js +17 -0
  90. package/lib/cloudflare/analytics-engine.js.map +1 -0
  91. package/lib/cloudflare/api-error.js +1 -1
  92. package/lib/cloudflare/api-error.js.map +1 -1
  93. package/lib/cloudflare/assets.js +2 -2
  94. package/lib/cloudflare/assets.js.map +1 -1
  95. package/lib/cloudflare/auth.js +1 -1
  96. package/lib/cloudflare/auth.js.map +1 -1
  97. package/lib/cloudflare/bindings.d.ts +18 -11
  98. package/lib/cloudflare/bindings.d.ts.map +1 -1
  99. package/lib/cloudflare/bindings.js +6 -0
  100. package/lib/cloudflare/bindings.js.map +1 -1
  101. package/lib/cloudflare/bound.d.ts +12 -10
  102. package/lib/cloudflare/bound.d.ts.map +1 -1
  103. package/lib/cloudflare/bucket.d.ts +6 -4
  104. package/lib/cloudflare/bucket.d.ts.map +1 -1
  105. package/lib/cloudflare/bucket.js +22 -2
  106. package/lib/cloudflare/bucket.js.map +1 -1
  107. package/lib/cloudflare/bundle/bundle-worker.d.ts +1 -0
  108. package/lib/cloudflare/bundle/bundle-worker.d.ts.map +1 -1
  109. package/lib/cloudflare/bundle/bundle-worker.js +4 -2
  110. package/lib/cloudflare/bundle/bundle-worker.js.map +1 -1
  111. package/lib/cloudflare/bundle/nodejs-compat-mode.d.ts +1 -1
  112. package/lib/cloudflare/bundle/nodejs-compat-mode.d.ts.map +1 -1
  113. package/lib/cloudflare/bundle/nodejs-compat-mode.js +2 -2
  114. package/lib/cloudflare/bundle/nodejs-compat-mode.js.map +1 -1
  115. package/lib/cloudflare/bundle/nodejs-compat.js +1 -1
  116. package/lib/cloudflare/bundle/nodejs-compat.js.map +1 -1
  117. package/lib/cloudflare/custom-domain.js +1 -1
  118. package/lib/cloudflare/custom-domain.js.map +1 -1
  119. package/lib/cloudflare/d1-database.d.ts +4 -62
  120. package/lib/cloudflare/d1-database.d.ts.map +1 -1
  121. package/lib/cloudflare/d1-database.js +27 -11
  122. package/lib/cloudflare/d1-database.js.map +1 -1
  123. package/lib/cloudflare/dns-records.d.ts +1 -1
  124. package/lib/cloudflare/dns-records.d.ts.map +1 -1
  125. package/lib/cloudflare/dns-records.js +2 -2
  126. package/lib/cloudflare/dns-records.js.map +1 -1
  127. package/lib/cloudflare/event-source.d.ts +3 -3
  128. package/lib/cloudflare/event-source.d.ts.map +1 -1
  129. package/lib/cloudflare/hyperdrive.d.ts +4 -3
  130. package/lib/cloudflare/hyperdrive.d.ts.map +1 -1
  131. package/lib/cloudflare/hyperdrive.js +9 -1
  132. package/lib/cloudflare/hyperdrive.js.map +1 -1
  133. package/lib/cloudflare/kv-namespace.d.ts +9 -5
  134. package/lib/cloudflare/kv-namespace.d.ts.map +1 -1
  135. package/lib/cloudflare/kv-namespace.js +26 -6
  136. package/lib/cloudflare/kv-namespace.js.map +1 -1
  137. package/lib/cloudflare/permission-groups.d.ts +1 -1
  138. package/lib/cloudflare/permission-groups.d.ts.map +1 -1
  139. package/lib/cloudflare/permission-groups.js +1 -1
  140. package/lib/cloudflare/permission-groups.js.map +1 -1
  141. package/lib/cloudflare/pipeline.d.ts +5 -3
  142. package/lib/cloudflare/pipeline.d.ts.map +1 -1
  143. package/lib/cloudflare/pipeline.js +16 -2
  144. package/lib/cloudflare/pipeline.js.map +1 -1
  145. package/lib/cloudflare/queue-consumer.d.ts +3 -3
  146. package/lib/cloudflare/queue-consumer.d.ts.map +1 -1
  147. package/lib/cloudflare/queue-consumer.js +1 -1
  148. package/lib/cloudflare/queue-consumer.js.map +1 -1
  149. package/lib/cloudflare/queue.d.ts +34 -22
  150. package/lib/cloudflare/queue.d.ts.map +1 -1
  151. package/lib/cloudflare/queue.js +66 -4
  152. package/lib/cloudflare/queue.js.map +1 -1
  153. package/lib/cloudflare/route.d.ts +1 -1
  154. package/lib/cloudflare/route.d.ts.map +1 -1
  155. package/lib/cloudflare/route.js +1 -1
  156. package/lib/cloudflare/route.js.map +1 -1
  157. package/lib/cloudflare/types.js +1 -1
  158. package/lib/cloudflare/types.js.map +1 -1
  159. package/lib/cloudflare/vectorize-index.d.ts +6 -4
  160. package/lib/cloudflare/vectorize-index.d.ts.map +1 -1
  161. package/lib/cloudflare/vectorize-index.js +20 -3
  162. package/lib/cloudflare/vectorize-index.js.map +1 -1
  163. package/lib/cloudflare/vectorize-metadata-index.d.ts +4 -3
  164. package/lib/cloudflare/vectorize-metadata-index.d.ts.map +1 -1
  165. package/lib/cloudflare/vectorize-metadata-index.js +5 -2
  166. package/lib/cloudflare/vectorize-metadata-index.js.map +1 -1
  167. package/lib/cloudflare/website.d.ts.map +1 -1
  168. package/lib/cloudflare/website.js +3 -0
  169. package/lib/cloudflare/website.js.map +1 -1
  170. package/lib/cloudflare/worker-assets.d.ts +32 -0
  171. package/lib/cloudflare/worker-assets.d.ts.map +1 -0
  172. package/lib/cloudflare/worker-assets.js +143 -0
  173. package/lib/cloudflare/worker-assets.js.map +1 -0
  174. package/lib/cloudflare/worker-metadata.d.ts +31 -0
  175. package/lib/cloudflare/worker-metadata.d.ts.map +1 -1
  176. package/lib/cloudflare/worker-metadata.js +248 -0
  177. package/lib/cloudflare/worker-metadata.js.map +1 -1
  178. package/lib/cloudflare/worker-stub.d.ts +40 -0
  179. package/lib/cloudflare/worker-stub.d.ts.map +1 -0
  180. package/lib/cloudflare/worker-stub.js +86 -0
  181. package/lib/cloudflare/worker-stub.js.map +1 -0
  182. package/lib/cloudflare/worker.d.ts +57 -28
  183. package/lib/cloudflare/worker.d.ts.map +1 -1
  184. package/lib/cloudflare/worker.js +203 -472
  185. package/lib/cloudflare/worker.js.map +1 -1
  186. package/lib/cloudflare/wrangler.json.d.ts +29 -1
  187. package/lib/cloudflare/wrangler.json.d.ts.map +1 -1
  188. package/lib/cloudflare/wrangler.json.js +50 -2
  189. package/lib/cloudflare/wrangler.json.js.map +1 -1
  190. package/lib/cloudflare/zone.d.ts +1 -1
  191. package/lib/cloudflare/zone.d.ts.map +1 -1
  192. package/lib/cloudflare/zone.js +1 -1
  193. package/lib/cloudflare/zone.js.map +1 -1
  194. package/lib/destroy.d.ts +1 -4
  195. package/lib/destroy.d.ts.map +1 -1
  196. package/lib/destroy.js +10 -21
  197. package/lib/destroy.js.map +1 -1
  198. package/lib/dns/import-dns.d.ts +1 -1
  199. package/lib/dns/import-dns.d.ts.map +1 -1
  200. package/lib/dns/import-dns.js +1 -1
  201. package/lib/dns/import-dns.js.map +1 -1
  202. package/lib/encrypt.d.ts.map +1 -1
  203. package/lib/encrypt.js +2 -1
  204. package/lib/encrypt.js.map +1 -1
  205. package/lib/env.js +14 -8
  206. package/lib/env.js.map +1 -1
  207. package/lib/esbuild/bundle.d.ts +2 -2
  208. package/lib/esbuild/bundle.d.ts.map +1 -1
  209. package/lib/esbuild/bundle.js +3 -3
  210. package/lib/esbuild/bundle.js.map +1 -1
  211. package/lib/fs/copy-file.d.ts +1 -1
  212. package/lib/fs/copy-file.d.ts.map +1 -1
  213. package/lib/fs/copy-file.js +1 -1
  214. package/lib/fs/copy-file.js.map +1 -1
  215. package/lib/github/client.js +1 -1
  216. package/lib/github/client.js.map +1 -1
  217. package/lib/github/repository-environment.d.ts +1 -1
  218. package/lib/github/repository-environment.d.ts.map +1 -1
  219. package/lib/github/repository-environment.js +2 -2
  220. package/lib/github/repository-environment.js.map +1 -1
  221. package/lib/github/secret.d.ts +1 -1
  222. package/lib/github/secret.d.ts.map +1 -1
  223. package/lib/github/secret.js +1 -1
  224. package/lib/github/secret.js.map +1 -1
  225. package/lib/internal/docs/providers.d.ts +1 -1
  226. package/lib/internal/docs/providers.d.ts.map +1 -1
  227. package/lib/internal/docs/providers.js +3 -1
  228. package/lib/internal/docs/providers.js.map +1 -1
  229. package/lib/neon/api-error.js +2 -2
  230. package/lib/neon/api-error.js.map +1 -1
  231. package/lib/os/exec.js +1 -1
  232. package/lib/os/exec.js.map +1 -1
  233. package/lib/resource.d.ts +13 -11
  234. package/lib/resource.d.ts.map +1 -1
  235. package/lib/resource.js +10 -5
  236. package/lib/resource.js.map +1 -1
  237. package/lib/runtime/bind.d.ts +25 -0
  238. package/lib/runtime/bind.d.ts.map +1 -0
  239. package/lib/runtime/bind.js +76 -0
  240. package/lib/runtime/bind.js.map +1 -0
  241. package/lib/runtime/global.d.ts +8 -0
  242. package/lib/runtime/global.d.ts.map +1 -0
  243. package/lib/runtime/global.js +3 -0
  244. package/lib/runtime/global.js.map +1 -0
  245. package/lib/runtime/plugin.d.ts +35 -0
  246. package/lib/runtime/plugin.d.ts.map +1 -0
  247. package/lib/runtime/plugin.js +133 -0
  248. package/lib/runtime/plugin.js.map +1 -0
  249. package/lib/runtime/shims.d.ts +6 -0
  250. package/lib/runtime/shims.d.ts.map +1 -0
  251. package/lib/runtime/shims.js +27 -0
  252. package/lib/runtime/shims.js.map +1 -0
  253. package/lib/runtime/state.d.ts +5 -0
  254. package/lib/runtime/state.d.ts.map +1 -0
  255. package/lib/runtime/state.js +4 -0
  256. package/lib/runtime/state.js.map +1 -0
  257. package/lib/scope.d.ts +16 -2
  258. package/lib/scope.d.ts.map +1 -1
  259. package/lib/scope.js +56 -9
  260. package/lib/scope.js.map +1 -1
  261. package/lib/secret.d.ts +7 -2
  262. package/lib/secret.d.ts.map +1 -1
  263. package/lib/secret.js +19 -4
  264. package/lib/secret.js.map +1 -1
  265. package/lib/sentry/client-key.d.ts +1 -1
  266. package/lib/sentry/client-key.d.ts.map +1 -1
  267. package/lib/sentry/client-key.js +1 -1
  268. package/lib/sentry/client-key.js.map +1 -1
  269. package/lib/sentry/project.d.ts +1 -1
  270. package/lib/sentry/project.d.ts.map +1 -1
  271. package/lib/sentry/project.js +1 -1
  272. package/lib/sentry/project.js.map +1 -1
  273. package/lib/sentry/team.d.ts +1 -1
  274. package/lib/sentry/team.d.ts.map +1 -1
  275. package/lib/sentry/team.js +1 -1
  276. package/lib/sentry/team.js.map +1 -1
  277. package/lib/serde.d.ts +26 -1
  278. package/lib/serde.d.ts.map +1 -1
  279. package/lib/serde.js +53 -8
  280. package/lib/serde.js.map +1 -1
  281. package/lib/stripe/meter.d.ts +1 -1
  282. package/lib/stripe/meter.d.ts.map +1 -1
  283. package/lib/stripe/meter.js +1 -1
  284. package/lib/stripe/meter.js.map +1 -1
  285. package/lib/stripe/price.d.ts +1 -1
  286. package/lib/stripe/price.d.ts.map +1 -1
  287. package/lib/stripe/price.js +1 -1
  288. package/lib/stripe/price.js.map +1 -1
  289. package/lib/stripe/product.d.ts +1 -1
  290. package/lib/stripe/product.d.ts.map +1 -1
  291. package/lib/stripe/product.js +1 -1
  292. package/lib/stripe/product.js.map +1 -1
  293. package/lib/stripe/webhook.d.ts +1 -1
  294. package/lib/stripe/webhook.d.ts.map +1 -1
  295. package/lib/stripe/webhook.js +1 -1
  296. package/lib/stripe/webhook.js.map +1 -1
  297. package/lib/test/bun.js +1 -1
  298. package/lib/test/bun.js.map +1 -1
  299. package/lib/test/prune.js +1 -1
  300. package/lib/test/prune.js.map +1 -1
  301. package/lib/upstash/redis.d.ts +1 -1
  302. package/lib/upstash/redis.d.ts.map +1 -1
  303. package/lib/upstash/redis.js +1 -1
  304. package/lib/upstash/redis.js.map +1 -1
  305. package/lib/util/assert-never.d.ts +2 -0
  306. package/lib/util/assert-never.d.ts.map +1 -0
  307. package/lib/util/assert-never.js +4 -0
  308. package/lib/util/assert-never.js.map +1 -0
  309. package/lib/util/content-type.d.ts +1 -1
  310. package/lib/util/content-type.d.ts.map +1 -1
  311. package/lib/util/content-type.js +1 -2
  312. package/lib/util/content-type.js.map +1 -1
  313. package/lib/util/retry.d.ts.map +1 -1
  314. package/lib/util/retry.js +1 -0
  315. package/lib/util/retry.js.map +1 -1
  316. package/lib/vercel/project-domain.d.ts +1 -1
  317. package/lib/vercel/project-domain.d.ts.map +1 -1
  318. package/lib/vercel/project-domain.js +1 -1
  319. package/lib/vercel/project-domain.js.map +1 -1
  320. package/lib/vercel/project.js +1 -1
  321. package/lib/vercel/project.js.map +1 -1
  322. package/lib/web/shadcn-component.d.ts +1 -1
  323. package/lib/web/shadcn-component.d.ts.map +1 -1
  324. package/lib/web/shadcn-component.js +1 -1
  325. package/lib/web/shadcn-component.js.map +1 -1
  326. package/lib/web/shadcn.d.ts +1 -1
  327. package/lib/web/shadcn.d.ts.map +1 -1
  328. package/lib/web/shadcn.js +1 -1
  329. package/lib/web/shadcn.js.map +1 -1
  330. package/lib/web/vitepress/dependencies.d.ts +1 -1
  331. package/lib/web/vitepress/dependencies.d.ts.map +1 -1
  332. package/lib/web/vitepress/dependencies.js +1 -1
  333. package/lib/web/vitepress/dependencies.js.map +1 -1
  334. package/lib/web/vitepress/vitepress.js +1 -1
  335. package/lib/web/vitepress/vitepress.js.map +1 -1
  336. package/package.json +2 -1
  337. package/src/ai/astro-file.ts +1 -1
  338. package/src/ai/client.ts +2 -2
  339. package/src/ai/css-file.ts +1 -1
  340. package/src/ai/data.ts +1 -1
  341. package/src/ai/html-file.ts +1 -1
  342. package/src/ai/json-file.ts +1 -1
  343. package/src/ai/typescript-file.ts +1 -1
  344. package/src/ai/vue-file.ts +1 -1
  345. package/src/ai/yaml-file.ts +2 -2
  346. package/src/alchemy.ts +18 -4
  347. package/src/apply.ts +27 -2
  348. package/src/aws/bucket.ts +1 -1
  349. package/src/aws/function.ts +2 -2
  350. package/src/aws/oidc/oidc-provider.ts +1 -1
  351. package/src/aws/policy-attachment.ts +1 -1
  352. package/src/aws/policy.ts +1 -1
  353. package/src/aws/queue.ts +28 -29
  354. package/src/aws/role.ts +1 -1
  355. package/src/aws/ses.ts +1 -1
  356. package/src/aws/table.ts +1 -1
  357. package/src/cloudflare/account-api-token.ts +1 -1
  358. package/src/cloudflare/ai-gateway.ts +23 -4
  359. package/src/cloudflare/analytics-engine.ts +26 -0
  360. package/src/cloudflare/api-error.ts +1 -1
  361. package/src/cloudflare/assets.ts +2 -2
  362. package/src/cloudflare/auth.ts +1 -1
  363. package/src/cloudflare/bindings.ts +35 -18
  364. package/src/cloudflare/bound.ts +27 -23
  365. package/src/cloudflare/bucket.ts +52 -24
  366. package/src/cloudflare/bundle/bundle-worker.ts +5 -2
  367. package/src/cloudflare/bundle/nodejs-compat-mode.ts +3 -3
  368. package/src/cloudflare/bundle/nodejs-compat.ts +1 -1
  369. package/src/cloudflare/custom-domain.ts +1 -1
  370. package/src/cloudflare/d1-database.ts +40 -19
  371. package/src/cloudflare/dns-records.ts +2 -2
  372. package/src/cloudflare/event-source.ts +3 -3
  373. package/src/cloudflare/hyperdrive.ts +19 -4
  374. package/src/cloudflare/kv-namespace.ts +46 -15
  375. package/src/cloudflare/permission-groups.ts +1 -1
  376. package/src/cloudflare/pipeline.ts +29 -6
  377. package/src/cloudflare/queue-consumer.ts +3 -3
  378. package/src/cloudflare/queue.ts +124 -23
  379. package/src/cloudflare/route.ts +1 -1
  380. package/src/cloudflare/types.ts +1 -1
  381. package/src/cloudflare/vectorize-index.ts +36 -8
  382. package/src/cloudflare/vectorize-metadata-index.ts +10 -4
  383. package/src/cloudflare/website.ts +3 -0
  384. package/src/cloudflare/worker-assets.ts +237 -0
  385. package/src/cloudflare/worker-metadata.ts +287 -0
  386. package/src/cloudflare/worker-stub.ts +153 -0
  387. package/src/cloudflare/worker.ts +386 -586
  388. package/src/cloudflare/wrangler.json.ts +75 -2
  389. package/src/cloudflare/zone.ts +1 -1
  390. package/src/destroy.ts +12 -23
  391. package/src/dns/import-dns.ts +1 -1
  392. package/src/encrypt.ts +2 -2
  393. package/src/env.ts +15 -8
  394. package/src/esbuild/bundle.ts +4 -3
  395. package/src/fs/copy-file.ts +1 -1
  396. package/src/github/client.ts +1 -1
  397. package/src/github/repository-environment.ts +2 -2
  398. package/src/github/secret.ts +1 -1
  399. package/src/internal/docs/providers.ts +1 -1
  400. package/src/neon/api-error.ts +2 -2
  401. package/src/os/exec.ts +1 -1
  402. package/src/resource.ts +22 -31
  403. package/src/runtime/bind.ts +95 -0
  404. package/src/runtime/global.ts +10 -0
  405. package/src/runtime/plugin.ts +162 -0
  406. package/src/runtime/shims.js +34 -0
  407. package/src/runtime/state.ts +9 -0
  408. package/src/scope.ts +72 -11
  409. package/src/secret.ts +29 -4
  410. package/src/sentry/client-key.ts +1 -1
  411. package/src/sentry/project.ts +1 -1
  412. package/src/sentry/team.ts +1 -1
  413. package/src/serde.ts +126 -10
  414. package/src/stripe/meter.ts +1 -1
  415. package/src/stripe/price.ts +1 -1
  416. package/src/stripe/product.ts +1 -1
  417. package/src/stripe/webhook.ts +1 -1
  418. package/src/test/bun.ts +1 -1
  419. package/src/test/prune.ts +1 -1
  420. package/src/upstash/redis.ts +1 -1
  421. package/src/util/assert-never.ts +3 -0
  422. package/src/util/content-type.ts +2 -3
  423. package/src/util/retry.ts +1 -0
  424. package/src/vercel/project-domain.ts +1 -1
  425. package/src/vercel/project.ts +1 -1
  426. package/src/web/shadcn-component.ts +1 -1
  427. package/src/web/shadcn.ts +1 -1
  428. package/src/web/vitepress/dependencies.ts +1 -1
  429. package/src/web/vitepress/vitepress.ts +1 -1
@@ -0,0 +1,143 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ import { getContentType } from "../util/content-type.js";
5
+ /**
6
+ * Uploads assets to Cloudflare and returns a completion token
7
+ *
8
+ * @param api CloudflareApi instance
9
+ * @param workerName Name of the worker
10
+ * @param assets Assets resource containing files to upload
11
+ * @param assetConfig Configuration for the assets
12
+ * @returns Completion token for the assets upload
13
+ */
14
+ export async function uploadAssets(api, workerName, assets, assetConfig) {
15
+ // Process the assets configuration once at the beginning
16
+ const processedConfig = createAssetConfig(assetConfig);
17
+ // Generate the file manifest
18
+ const fileMetadata = {};
19
+ // Process each file in the assets
20
+ for (const file of assets.files) {
21
+ const { hash, size } = await calculateFileMetadata(file.filePath);
22
+ // Use the relative path as the key, ensuring it starts with a slash
23
+ const key = file.path.startsWith("/") ? file.path : `/${file.path}`;
24
+ fileMetadata[key] = { hash, size };
25
+ }
26
+ // Start the upload session
27
+ const uploadSessionUrl = `/accounts/${api.accountId}/workers/scripts/${workerName}/assets-upload-session`;
28
+ const uploadSessionResponse = await api.post(uploadSessionUrl, JSON.stringify({ manifest: fileMetadata }), {
29
+ headers: { "Content-Type": "application/json" },
30
+ });
31
+ if (!uploadSessionResponse.ok) {
32
+ throw new Error(`Failed to start assets upload session: ${uploadSessionResponse.status} ${uploadSessionResponse.statusText}`);
33
+ }
34
+ const sessionData = (await uploadSessionResponse.json());
35
+ // If there are no buckets, assets are already uploaded or empty
36
+ if (!sessionData.result.buckets || sessionData.result.buckets.length === 0) {
37
+ return {
38
+ completionToken: sessionData.result.jwt,
39
+ assetConfig: processedConfig,
40
+ };
41
+ }
42
+ // Upload the files in batches as specified by the API
43
+ let completionToken = sessionData.result.jwt;
44
+ const buckets = sessionData.result.buckets;
45
+ // Process each bucket of files
46
+ for (const bucket of buckets) {
47
+ const formData = new FormData();
48
+ // Add each file in the bucket to the form
49
+ for (const fileHash of bucket) {
50
+ // Find the file with this hash
51
+ const file = assets.files.find((f) => {
52
+ const filePath = f.path.startsWith("/") ? f.path : `/${f.path}`;
53
+ return fileMetadata[filePath]?.hash === fileHash;
54
+ });
55
+ if (!file) {
56
+ throw new Error(`Could not find file with hash ${fileHash}`);
57
+ }
58
+ // Read the file content
59
+ const fileContent = await fs.readFile(file.filePath);
60
+ // Convert to base64 as required by the API when using base64=true
61
+ const base64Content = fileContent.toString("base64");
62
+ // Add the file to the form with the hash as the key and set the correct content type
63
+ const blob = new Blob([base64Content], {
64
+ // if you set application/octet-stream, you get weird `-1` errors with a message to contact support
65
+ type: getContentType(file.filePath) ?? "application/null",
66
+ });
67
+ formData.append(fileHash, blob, fileHash);
68
+ }
69
+ // Upload this batch of files
70
+ const uploadResponse = await api.post(`/accounts/${api.accountId}/workers/assets/upload?base64=true`, formData, {
71
+ headers: {
72
+ Authorization: `Bearer ${completionToken}`,
73
+ "Content-Type": "multipart/form-data",
74
+ },
75
+ });
76
+ if (!uploadResponse.ok) {
77
+ throw new Error(`Failed to upload asset files: ${uploadResponse.status} ${uploadResponse.statusText}`);
78
+ }
79
+ const uploadData = (await uploadResponse.json());
80
+ if (!uploadData.success) {
81
+ const error = uploadData.errors[0];
82
+ const message = error.message;
83
+ const code = error.code;
84
+ throw new Error(`Failed to upload asset files: ${message} (Code: ${code})`);
85
+ }
86
+ // Update the completion token for the next batch
87
+ if (uploadData.result.jwt) {
88
+ completionToken = uploadData.result.jwt;
89
+ }
90
+ }
91
+ // Return the final completion token with asset configuration
92
+ return {
93
+ completionToken,
94
+ assetConfig: processedConfig,
95
+ };
96
+ }
97
+ /**
98
+ * Creates asset configuration object from provided config or defaults
99
+ */
100
+ export function createAssetConfig(config) {
101
+ const assetConfig = {
102
+ html_handling: "auto-trailing-slash",
103
+ };
104
+ if (config) {
105
+ if (config._headers !== undefined) {
106
+ assetConfig._headers = config._headers;
107
+ }
108
+ if (config._redirects !== undefined) {
109
+ assetConfig._redirects = config._redirects;
110
+ }
111
+ if (config.html_handling !== undefined) {
112
+ assetConfig.html_handling = config.html_handling;
113
+ }
114
+ if (config.not_found_handling !== undefined) {
115
+ assetConfig.not_found_handling = config.not_found_handling;
116
+ }
117
+ if (config.run_worker_first !== undefined) {
118
+ assetConfig.run_worker_first = config.run_worker_first;
119
+ }
120
+ if (config.serve_directly !== undefined) {
121
+ assetConfig.serve_directly = config.serve_directly;
122
+ }
123
+ }
124
+ return assetConfig;
125
+ }
126
+ /**
127
+ * Calculate the SHA-256 hash and size of a file
128
+ *
129
+ * @param filePath Path to the file
130
+ * @returns Hash (first 32 chars of SHA-256) and size of the file
131
+ */
132
+ export async function calculateFileMetadata(filePath) {
133
+ const contents = await fs.readFile(filePath);
134
+ const hash = crypto.createHash("sha256");
135
+ hash.update(contents);
136
+ const extension = path.extname(filePath).substring(1);
137
+ hash.update(extension);
138
+ return {
139
+ hash: hash.digest("hex").slice(0, 32),
140
+ size: contents.length,
141
+ };
142
+ }
143
+ //# sourceMappingURL=worker-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-assets.js","sourceRoot":"","sources":["../../src/cloudflare/worker-assets.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,8 @@
1
+ import type { Context } from "../context.js";
2
+ import { type Bindings, type WorkerBindingSpec } from "./bindings.js";
3
+ import { type AssetUploadResult } from "./worker-assets.js";
4
+ import type { SingleStepMigration } from "./worker-migration.js";
5
+ import type { AssetsConfig, Worker, WorkerProps } from "./worker.js";
1
6
  /**
2
7
  * Metadata returned by Cloudflare API for a worker script
3
8
  */
@@ -127,4 +132,30 @@ export interface WorkerDefaultEnvironment extends WorkerEnvironment {
127
132
  */
128
133
  script: WorkerScriptInfo;
129
134
  }
135
+ export interface WorkerMetadata {
136
+ compatibility_date: string;
137
+ compatibility_flags?: string[];
138
+ bindings: WorkerBindingSpec[];
139
+ observability: {
140
+ enabled: boolean;
141
+ };
142
+ migrations?: SingleStepMigration;
143
+ main_module?: string;
144
+ body_part?: string;
145
+ tags?: string[];
146
+ assets?: {
147
+ jwt?: string;
148
+ keep_assets?: boolean;
149
+ config?: AssetsConfig;
150
+ };
151
+ cron_triggers?: {
152
+ cron: string;
153
+ suspended: boolean;
154
+ }[];
155
+ }
156
+ export declare function prepareWorkerMetadata<B extends Bindings>(ctx: Context<Worker<B>>, oldBindings: Bindings | undefined, props: WorkerProps & {
157
+ compatibilityDate: string;
158
+ compatibilityFlags: string[];
159
+ workerName: string;
160
+ }, assetUploadResult?: AssetUploadResult): Promise<WorkerMetadata>;
130
161
  //# sourceMappingURL=worker-metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-metadata.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker-metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,mBAAmB,CAAC,EAAE,wBAAwB,CAAC;IAE/C;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,IAAI,EAAE,MAAM,EAAE,CAAC;IAEf;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,cAAc,EAAE,GAAG,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE;QACb;;WAEG;QACH,OAAO,EAAE,OAAO,CAAC;QAEjB;;WAEG;QACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;KACnC,CAAC;IAEF;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;OAEG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAE3B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE;;OAEG;IACH,MAAM,EAAE,gBAAgB,CAAC;CAC1B"}
1
+ {"version":3,"file":"worker-metadata.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker-metadata.ts"],"names":[],"mappings":"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"}
@@ -1 +1,249 @@
1
+ import { slugify } from "../util/slugify.js";
2
+ import { Self } from "./bindings.js";
3
+ import { createAssetConfig } from "./worker-assets.js";
4
+ export async function prepareWorkerMetadata(ctx, oldBindings, props, assetUploadResult) {
5
+ const deletedClasses = Object.entries(oldBindings ?? {})
6
+ .filter(([key]) => !props.bindings?.[key])
7
+ .flatMap(([_, binding]) => {
8
+ if (binding &&
9
+ typeof binding === "object" &&
10
+ binding.type === "durable_object_namespace") {
11
+ return [binding.className];
12
+ }
13
+ return [];
14
+ });
15
+ // Prepare metadata with bindings
16
+ const meta = {
17
+ compatibility_date: props.compatibilityDate,
18
+ compatibility_flags: props.compatibilityFlags,
19
+ bindings: [],
20
+ observability: {
21
+ enabled: props.observability?.enabled !== false,
22
+ },
23
+ // TODO(sam): base64 encode instead? 0 collision risk vs readability.
24
+ tags: [`alchemy:id:${slugify(ctx.fqn)}`],
25
+ migrations: {
26
+ new_classes: props.migrations?.new_classes ?? [],
27
+ deleted_classes: [
28
+ ...deletedClasses,
29
+ ...(props.migrations?.deleted_classes ?? []),
30
+ ],
31
+ renamed_classes: props.migrations?.renamed_classes ?? [],
32
+ transferred_classes: props.migrations?.transferred_classes ?? [],
33
+ new_sqlite_classes: props.migrations?.new_sqlite_classes ?? [],
34
+ },
35
+ };
36
+ // If we have asset upload results, add them to the metadata
37
+ if (assetUploadResult) {
38
+ meta.assets = {
39
+ jwt: assetUploadResult.completionToken,
40
+ };
41
+ // Initialize config from assetUploadResult if it exists
42
+ if (assetUploadResult.assetConfig) {
43
+ meta.assets.config = {
44
+ ...assetUploadResult.assetConfig,
45
+ };
46
+ }
47
+ // If there's no config from assetUploadResult but we have props.assets,
48
+ // we need to create the config ourselves (this handles the case when no assets were uploaded)
49
+ if (!meta.assets.config && props.assets) {
50
+ meta.assets.config = createAssetConfig(props.assets);
51
+ }
52
+ }
53
+ const bindings = (props.bindings ?? {});
54
+ // Convert bindings to the format expected by the API
55
+ for (const [bindingName, binding] of Object.entries(bindings)) {
56
+ // Create a copy of the binding to avoid modifying the original
57
+ if (typeof binding === "string") {
58
+ meta.bindings.push({
59
+ type: "plain_text",
60
+ name: bindingName,
61
+ text: binding,
62
+ });
63
+ }
64
+ else if (binding === Self) {
65
+ meta.bindings.push({
66
+ type: "service",
67
+ name: bindingName,
68
+ service: props.workerName,
69
+ });
70
+ }
71
+ else if (binding.type === "d1") {
72
+ meta.bindings.push({
73
+ type: "d1",
74
+ name: bindingName,
75
+ id: binding.id,
76
+ });
77
+ }
78
+ else if (binding.type === "kv_namespace") {
79
+ meta.bindings.push({
80
+ type: "kv_namespace",
81
+ name: bindingName,
82
+ namespace_id: "namespaceId" in binding ? binding.namespaceId : binding.id,
83
+ });
84
+ }
85
+ else if (binding.type === "service") {
86
+ meta.bindings.push({
87
+ type: "service",
88
+ name: bindingName,
89
+ service: binding.name,
90
+ });
91
+ }
92
+ else if (binding.type === "durable_object_namespace") {
93
+ meta.bindings.push({
94
+ type: "durable_object_namespace",
95
+ name: bindingName,
96
+ class_name: binding.className,
97
+ script_name: binding.scriptName,
98
+ environment: binding.environment,
99
+ namespace_id: binding.namespaceId,
100
+ });
101
+ configureClassMigration(binding, binding.id, binding.className);
102
+ }
103
+ else if (binding.type === "r2_bucket") {
104
+ meta.bindings.push({
105
+ type: "r2_bucket",
106
+ name: bindingName,
107
+ bucket_name: binding.name,
108
+ });
109
+ }
110
+ else if (binding.type === "assets") {
111
+ meta.bindings.push({
112
+ type: "assets",
113
+ name: bindingName,
114
+ });
115
+ }
116
+ else if (binding.type === "secret") {
117
+ meta.bindings.push({
118
+ type: "secret_text",
119
+ name: bindingName,
120
+ text: binding.unencrypted,
121
+ });
122
+ }
123
+ else if (binding.type === "workflow") {
124
+ meta.bindings.push({
125
+ type: "workflow",
126
+ name: bindingName,
127
+ workflow_name: binding.workflowName,
128
+ class_name: binding.className,
129
+ // this should be set if the Workflow is in another script ...
130
+ // script_name: ??,
131
+ });
132
+ // it's unclear whether this is needed, but it works both ways
133
+ // configureClassMigration(binding, binding.id, binding.className);
134
+ }
135
+ else if (binding.type === "queue") {
136
+ meta.bindings.push({
137
+ type: "queue",
138
+ name: bindingName,
139
+ queue_name: binding.name,
140
+ });
141
+ }
142
+ else if (binding.type === "pipeline") {
143
+ meta.bindings.push({
144
+ type: "pipelines",
145
+ name: bindingName,
146
+ pipeline: binding.name,
147
+ });
148
+ }
149
+ else if (binding.type === "vectorize") {
150
+ meta.bindings.push({
151
+ type: "vectorize",
152
+ name: bindingName,
153
+ index_name: binding.name,
154
+ });
155
+ }
156
+ else if (binding.type === "ai_gateway") {
157
+ // AI Gateway binding - just needs the name property
158
+ meta.bindings.push({
159
+ type: "ai",
160
+ name: bindingName,
161
+ });
162
+ }
163
+ else if (binding.type === "hyperdrive") {
164
+ // Hyperdrive binding
165
+ meta.bindings.push({
166
+ type: "hyperdrive",
167
+ name: bindingName,
168
+ id: binding.hyperdriveId,
169
+ });
170
+ }
171
+ else if (binding.type === "browser") {
172
+ meta.bindings.push({
173
+ type: "browser",
174
+ name: bindingName,
175
+ });
176
+ }
177
+ else if (binding.type === "ai") {
178
+ meta.bindings.push({
179
+ type: "ai",
180
+ name: bindingName,
181
+ });
182
+ }
183
+ else if (binding.type === "json") {
184
+ meta.bindings.push({
185
+ type: "json",
186
+ name: bindingName,
187
+ json: JSON.stringify(binding.json),
188
+ });
189
+ }
190
+ else if (binding.type === "analytics_engine") {
191
+ meta.bindings.push({
192
+ type: "analytics_engine",
193
+ name: bindingName,
194
+ dataset: binding.dataset,
195
+ });
196
+ }
197
+ else {
198
+ // @ts-expect-error - we should never reach here
199
+ throw new Error(`Unsupported binding type: ${binding.type}`);
200
+ }
201
+ }
202
+ function configureClassMigration(binding, stableId, className) {
203
+ const oldBinding = Object.values(oldBindings ?? {})
204
+ ?.filter((b) => typeof b === "object" &&
205
+ (b.type === "durable_object_namespace" || b.type === "workflow"))
206
+ ?.find((b) => b.id === stableId);
207
+ if (!oldBinding) {
208
+ if (binding.type === "durable_object_namespace" && binding.sqlite) {
209
+ meta.migrations.new_sqlite_classes.push(className);
210
+ }
211
+ else {
212
+ meta.migrations.new_classes.push(className);
213
+ }
214
+ }
215
+ else if (oldBinding.className !== className) {
216
+ meta.migrations.renamed_classes.push({
217
+ from: oldBinding.className,
218
+ to: className,
219
+ });
220
+ }
221
+ }
222
+ // Convert env variables to plain_text bindings
223
+ // TODO(sam): remove Worker.env in favor of always bindings
224
+ if (props.env) {
225
+ for (const [key, value] of Object.entries(props.env)) {
226
+ meta.bindings.push({
227
+ name: key,
228
+ type: "plain_text",
229
+ text: value,
230
+ });
231
+ }
232
+ }
233
+ // Determine if we're using ESM or service worker format
234
+ const isEsModule = props.format !== "cjs"; // Default to ESM unless CJS is specified
235
+ const scriptName = isEsModule ? "worker.js" : "script";
236
+ if (isEsModule) {
237
+ // For ES modules format
238
+ meta.main_module = scriptName;
239
+ }
240
+ else {
241
+ // For service worker format (CJS)
242
+ meta.body_part = scriptName;
243
+ }
244
+ if (process.env.DEBUG) {
245
+ console.log(meta);
246
+ }
247
+ return meta;
248
+ }
1
249
  //# sourceMappingURL=worker-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-metadata.js","sourceRoot":"","sources":["../../src/cloudflare/worker-metadata.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"worker-metadata.js","sourceRoot":"","sources":["../../src/cloudflare/worker-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { Context } from "../context.js";
2
+ import { Resource } from "../resource.js";
3
+ import { type CloudflareApiOptions } from "./api.js";
4
+ /**
5
+ * Properties for creating a Worker stub
6
+ */
7
+ export interface WorkerStubProps extends CloudflareApiOptions {
8
+ /**
9
+ * Name for the worker
10
+ */
11
+ name: string;
12
+ }
13
+ /**
14
+ * Output returned after WorkerStub creation
15
+ */
16
+ export interface WorkerStub extends Resource<"cloudflare::WorkerStub"> {
17
+ type: "service";
18
+ /**
19
+ * The name of the worker
20
+ */
21
+ name: string;
22
+ }
23
+ export declare function isWorkerStub(resource: Resource): resource is WorkerStub;
24
+ /**
25
+ * Creates an empty worker if it doesn't already exist.
26
+ *
27
+ * This is useful for reserving a worker name without deploying any code.
28
+ * Unlike the full Worker resource, WorkerStub only checks if the worker
29
+ * exists and creates an empty one if needed.
30
+ *
31
+ * @example
32
+ * // Reserve a worker name without deploying code
33
+ * const workerStub = await WorkerStub("my-worker", {
34
+ * name: "my-reserved-worker"
35
+ * });
36
+ *
37
+ * console.log(`Worker ${workerStub.name} exists: ${!workerStub.created}`);
38
+ */
39
+ export declare const WorkerStub: (((this: any, id: string, props?: {}) => never) & (new (_: never) => never)) | ((this: Context<WorkerStub>, _id: string, props: WorkerStubProps) => Promise<WorkerStub>);
40
+ //# sourceMappingURL=worker-stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-stub.d.ts","sourceRoot":"","sources":["../../src/cloudflare/worker-stub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAgB,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAGL,KAAK,oBAAoB,EAC1B,MAAM,UAAU,CAAC;AAElB;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ,CAAC,wBAAwB,CAAC;IACpE,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,IAAI,UAAU,CAEvE;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,UAAU,yFAGb,OAAO,CAAC,UAAU,CAAC,OACpB,MAAM,SACJ,eAAe,KACrB,OAAO,CAAC,UAAU,CAAC,CAoBvB,CAAC"}
@@ -0,0 +1,86 @@
1
+ import { Resource, ResourceKind } from "../resource.js";
2
+ import { handleApiError } from "./api-error.js";
3
+ import { createCloudflareApi, } from "./api.js";
4
+ export function isWorkerStub(resource) {
5
+ return resource[ResourceKind] === "cloudflare::WorkerStub";
6
+ }
7
+ /**
8
+ * Creates an empty worker if it doesn't already exist.
9
+ *
10
+ * This is useful for reserving a worker name without deploying any code.
11
+ * Unlike the full Worker resource, WorkerStub only checks if the worker
12
+ * exists and creates an empty one if needed.
13
+ *
14
+ * @example
15
+ * // Reserve a worker name without deploying code
16
+ * const workerStub = await WorkerStub("my-worker", {
17
+ * name: "my-reserved-worker"
18
+ * });
19
+ *
20
+ * console.log(`Worker ${workerStub.name} exists: ${!workerStub.created}`);
21
+ */
22
+ export const WorkerStub = Resource("cloudflare::WorkerStub", async function (_id, props) {
23
+ // Create Cloudflare API client with automatic account discovery
24
+ const api = await createCloudflareApi(props);
25
+ if (this.phase === "delete") {
26
+ // We don't actually delete the worker, just mark the resource as destroyed
27
+ return this.destroy();
28
+ }
29
+ // If worker doesn't exist and we're in create phase, create an empty one
30
+ if (!(await exists(api, props.name)) && this.phase === "create") {
31
+ await createEmptyWorker(api, props.name);
32
+ }
33
+ // Return the worker stub info
34
+ return this({
35
+ type: "service",
36
+ ...props,
37
+ });
38
+ });
39
+ async function exists(api, workerName) {
40
+ const response = await api.get(`/accounts/${api.accountId}/workers/scripts/${workerName}`);
41
+ if (response.ok) {
42
+ return true;
43
+ }
44
+ else if (response.status === 404) {
45
+ return false;
46
+ }
47
+ else {
48
+ return await handleApiError(response, "get", "worker", workerName);
49
+ }
50
+ }
51
+ async function createEmptyWorker(api, workerName) {
52
+ // Minimal empty worker script
53
+ const emptyScript = `export default {
54
+ fetch() {
55
+ return new Response("Worker stub", { status: 200 })
56
+ }
57
+ }`;
58
+ // Create FormData for the upload
59
+ const formData = new FormData();
60
+ // Add the empty script content
61
+ formData.append("worker.js", new Blob([emptyScript], {
62
+ type: "application/javascript+module",
63
+ }), "worker.js");
64
+ // Add metadata as JSON
65
+ formData.append("metadata", new Blob([
66
+ // Minimal metadata required for worker creation
67
+ JSON.stringify({
68
+ main_module: "worker.js",
69
+ compatibility_date: "2025-04-20",
70
+ bindings: [],
71
+ }),
72
+ ], {
73
+ type: "application/json",
74
+ }));
75
+ // Upload worker script
76
+ const uploadResponse = await api.put(`/accounts/${api.accountId}/workers/scripts/${workerName}`, formData, {
77
+ headers: {
78
+ "Content-Type": "multipart/form-data",
79
+ },
80
+ });
81
+ // Check if the upload was successful
82
+ if (!uploadResponse.ok) {
83
+ throw new Error(`Failed to create empty worker: ${uploadResponse.status} ${uploadResponse.statusText}`);
84
+ }
85
+ }
86
+ //# sourceMappingURL=worker-stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-stub.js","sourceRoot":"","sources":["../../src/cloudflare/worker-stub.ts"],"names":[],"mappings":"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"}