alchemy 2.0.0-beta.61 → 2.0.0-beta.63

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 (1017) hide show
  1. package/README.md +26 -11
  2. package/bin/exec.js +2023 -75
  3. package/bin/exec.js.map +1 -1
  4. package/lib/AWS/ACM/Certificate.d.ts.map +1 -1
  5. package/lib/AWS/ACM/Certificate.js +16 -4
  6. package/lib/AWS/ACM/Certificate.js.map +1 -1
  7. package/lib/AWS/ApiGateway/common.d.ts.map +1 -1
  8. package/lib/AWS/ApiGateway/common.js +6 -3
  9. package/lib/AWS/ApiGateway/common.js.map +1 -1
  10. package/lib/AWS/AuthProvider.d.ts.map +1 -1
  11. package/lib/AWS/AuthProvider.js +2 -2
  12. package/lib/AWS/AuthProvider.js.map +1 -1
  13. package/lib/AWS/AutoScaling/AutoScalingGroup.d.ts.map +1 -1
  14. package/lib/AWS/AutoScaling/AutoScalingGroup.js +8 -2
  15. package/lib/AWS/AutoScaling/AutoScalingGroup.js.map +1 -1
  16. package/lib/AWS/Bootstrap.d.ts.map +1 -1
  17. package/lib/AWS/Bootstrap.js +5 -2
  18. package/lib/AWS/Bootstrap.js.map +1 -1
  19. package/lib/AWS/CloudFront/Distribution.d.ts.map +1 -1
  20. package/lib/AWS/CloudFront/Distribution.js +20 -5
  21. package/lib/AWS/CloudFront/Distribution.js.map +1 -1
  22. package/lib/AWS/CloudFront/Function.js +5 -2
  23. package/lib/AWS/CloudFront/Function.js.map +1 -1
  24. package/lib/AWS/CloudFront/Invalidation.d.ts.map +1 -1
  25. package/lib/AWS/CloudFront/Invalidation.js +4 -1
  26. package/lib/AWS/CloudFront/Invalidation.js.map +1 -1
  27. package/lib/AWS/CloudFront/KvEntries.d.ts.map +1 -1
  28. package/lib/AWS/CloudFront/KvEntries.js +4 -1
  29. package/lib/AWS/CloudFront/KvEntries.js.map +1 -1
  30. package/lib/AWS/CloudFront/KvRoutesUpdate.d.ts.map +1 -1
  31. package/lib/AWS/CloudFront/KvRoutesUpdate.js +8 -2
  32. package/lib/AWS/CloudFront/KvRoutesUpdate.js.map +1 -1
  33. package/lib/AWS/CloudFront/VpcOrigin.d.ts.map +1 -1
  34. package/lib/AWS/CloudFront/VpcOrigin.js +12 -3
  35. package/lib/AWS/CloudFront/VpcOrigin.js.map +1 -1
  36. package/lib/AWS/CloudFront/common.d.ts.map +1 -1
  37. package/lib/AWS/CloudFront/common.js +5 -2
  38. package/lib/AWS/CloudFront/common.js.map +1 -1
  39. package/lib/AWS/CloudWatch/AnomalyDetector.d.ts.map +1 -1
  40. package/lib/AWS/CloudWatch/AnomalyDetector.js +4 -1
  41. package/lib/AWS/CloudWatch/AnomalyDetector.js.map +1 -1
  42. package/lib/AWS/CloudWatch/common.d.ts.map +1 -1
  43. package/lib/AWS/CloudWatch/common.js +1 -1
  44. package/lib/AWS/CloudWatch/common.js.map +1 -1
  45. package/lib/AWS/DynamoDB/Table.d.ts.map +1 -1
  46. package/lib/AWS/DynamoDB/Table.js +53 -20
  47. package/lib/AWS/DynamoDB/Table.js.map +1 -1
  48. package/lib/AWS/EC2/EIP.d.ts.map +1 -1
  49. package/lib/AWS/EC2/EIP.js +4 -1
  50. package/lib/AWS/EC2/EIP.js.map +1 -1
  51. package/lib/AWS/EC2/EgressOnlyInternetGateway.d.ts.map +1 -1
  52. package/lib/AWS/EC2/EgressOnlyInternetGateway.js +4 -2
  53. package/lib/AWS/EC2/EgressOnlyInternetGateway.js.map +1 -1
  54. package/lib/AWS/EC2/Instance.d.ts.map +1 -1
  55. package/lib/AWS/EC2/Instance.js +12 -3
  56. package/lib/AWS/EC2/Instance.js.map +1 -1
  57. package/lib/AWS/EC2/InternetGateway.d.ts.map +1 -1
  58. package/lib/AWS/EC2/InternetGateway.js +12 -5
  59. package/lib/AWS/EC2/InternetGateway.js.map +1 -1
  60. package/lib/AWS/EC2/NatGateway.js +2 -4
  61. package/lib/AWS/EC2/NatGateway.js.map +1 -1
  62. package/lib/AWS/EC2/NetworkAcl.d.ts.map +1 -1
  63. package/lib/AWS/EC2/NetworkAcl.js +4 -1
  64. package/lib/AWS/EC2/NetworkAcl.js.map +1 -1
  65. package/lib/AWS/EC2/NetworkAclEntry.d.ts.map +1 -1
  66. package/lib/AWS/EC2/NetworkAclEntry.js +4 -1
  67. package/lib/AWS/EC2/NetworkAclEntry.js.map +1 -1
  68. package/lib/AWS/EC2/RouteTable.d.ts.map +1 -1
  69. package/lib/AWS/EC2/RouteTable.js +8 -6
  70. package/lib/AWS/EC2/RouteTable.js.map +1 -1
  71. package/lib/AWS/EC2/RouteTableAssociation.js +2 -5
  72. package/lib/AWS/EC2/RouteTableAssociation.js.map +1 -1
  73. package/lib/AWS/EC2/SecurityGroup.d.ts.map +1 -1
  74. package/lib/AWS/EC2/SecurityGroup.js +8 -3
  75. package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
  76. package/lib/AWS/EC2/Subnet.d.ts.map +1 -1
  77. package/lib/AWS/EC2/Subnet.js +10 -6
  78. package/lib/AWS/EC2/Subnet.js.map +1 -1
  79. package/lib/AWS/EC2/Vpc.d.ts.map +1 -1
  80. package/lib/AWS/EC2/Vpc.js +7 -7
  81. package/lib/AWS/EC2/Vpc.js.map +1 -1
  82. package/lib/AWS/EC2/VpcEndpoint.js +2 -4
  83. package/lib/AWS/EC2/VpcEndpoint.js.map +1 -1
  84. package/lib/AWS/EC2/hosted.d.ts.map +1 -1
  85. package/lib/AWS/EC2/hosted.js +2 -1
  86. package/lib/AWS/EC2/hosted.js.map +1 -1
  87. package/lib/AWS/ECS/Service.d.ts.map +1 -1
  88. package/lib/AWS/ECS/Service.js +4 -1
  89. package/lib/AWS/ECS/Service.js.map +1 -1
  90. package/lib/AWS/ECS/Task.d.ts.map +1 -1
  91. package/lib/AWS/ECS/Task.js +2 -1
  92. package/lib/AWS/ECS/Task.js.map +1 -1
  93. package/lib/AWS/EKS/Addon.js +8 -2
  94. package/lib/AWS/EKS/Addon.js.map +1 -1
  95. package/lib/AWS/EKS/Cluster.d.ts.map +1 -1
  96. package/lib/AWS/EKS/Cluster.js +4 -1
  97. package/lib/AWS/EKS/Cluster.js.map +1 -1
  98. package/lib/AWS/ELBv2/TargetGroup.d.ts.map +1 -1
  99. package/lib/AWS/ELBv2/TargetGroup.js +4 -1
  100. package/lib/AWS/ELBv2/TargetGroup.js.map +1 -1
  101. package/lib/AWS/ELBv2/TrustStore.d.ts.map +1 -1
  102. package/lib/AWS/ELBv2/TrustStore.js +4 -1
  103. package/lib/AWS/ELBv2/TrustStore.js.map +1 -1
  104. package/lib/AWS/IAM/SAMLProvider.js +4 -1
  105. package/lib/AWS/IAM/SAMLProvider.js.map +1 -1
  106. package/lib/AWS/IdentityCenter/AccountAssignment.js +8 -2
  107. package/lib/AWS/IdentityCenter/AccountAssignment.js.map +1 -1
  108. package/lib/AWS/IdentityCenter/common.d.ts.map +1 -1
  109. package/lib/AWS/IdentityCenter/common.js +1 -1
  110. package/lib/AWS/IdentityCenter/common.js.map +1 -1
  111. package/lib/AWS/KMS/Alias.js +4 -1
  112. package/lib/AWS/KMS/Alias.js.map +1 -1
  113. package/lib/AWS/KMS/Key.js +4 -1
  114. package/lib/AWS/KMS/Key.js.map +1 -1
  115. package/lib/AWS/Kinesis/Stream.d.ts.map +1 -1
  116. package/lib/AWS/Kinesis/Stream.js +2 -2
  117. package/lib/AWS/Kinesis/Stream.js.map +1 -1
  118. package/lib/AWS/Kinesis/StreamConsumer.d.ts.map +1 -1
  119. package/lib/AWS/Kinesis/StreamConsumer.js +7 -4
  120. package/lib/AWS/Kinesis/StreamConsumer.js.map +1 -1
  121. package/lib/AWS/Lambda/Alias.d.ts.map +1 -1
  122. package/lib/AWS/Lambda/Alias.js +4 -1
  123. package/lib/AWS/Lambda/Alias.js.map +1 -1
  124. package/lib/AWS/Lambda/EventInvokeConfig.d.ts.map +1 -1
  125. package/lib/AWS/Lambda/EventInvokeConfig.js +2 -2
  126. package/lib/AWS/Lambda/EventInvokeConfig.js.map +1 -1
  127. package/lib/AWS/Lambda/EventSourceMapping.d.ts.map +1 -1
  128. package/lib/AWS/Lambda/EventSourceMapping.js +10 -4
  129. package/lib/AWS/Lambda/EventSourceMapping.js.map +1 -1
  130. package/lib/AWS/Lambda/Function.d.ts +16 -1
  131. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  132. package/lib/AWS/Lambda/Function.js +113 -65
  133. package/lib/AWS/Lambda/Function.js.map +1 -1
  134. package/lib/AWS/Lambda/MicrovmProvider.d.ts.map +1 -1
  135. package/lib/AWS/Lambda/MicrovmProvider.js +13 -5
  136. package/lib/AWS/Lambda/MicrovmProvider.js.map +1 -1
  137. package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts.map +1 -1
  138. package/lib/AWS/Lambda/MicrovmRuntimeContext.js +9 -21
  139. package/lib/AWS/Lambda/MicrovmRuntimeContext.js.map +1 -1
  140. package/lib/AWS/Lambda/NetworkConnector.js +13 -5
  141. package/lib/AWS/Lambda/NetworkConnector.js.map +1 -1
  142. package/lib/AWS/Lambda/RuntimeExtension.d.ts +27 -0
  143. package/lib/AWS/Lambda/RuntimeExtension.d.ts.map +1 -0
  144. package/lib/AWS/Lambda/RuntimeExtension.js +49 -0
  145. package/lib/AWS/Lambda/RuntimeExtension.js.map +1 -0
  146. package/lib/AWS/Organizations/Account.js +5 -2
  147. package/lib/AWS/Organizations/Account.js.map +1 -1
  148. package/lib/AWS/Organizations/common.d.ts.map +1 -1
  149. package/lib/AWS/Organizations/common.js +1 -1
  150. package/lib/AWS/Organizations/common.js.map +1 -1
  151. package/lib/AWS/Providers.js +14 -12
  152. package/lib/AWS/Providers.js.map +1 -1
  153. package/lib/AWS/RDS/DBCluster.d.ts.map +1 -1
  154. package/lib/AWS/RDS/DBCluster.js +8 -2
  155. package/lib/AWS/RDS/DBCluster.js.map +1 -1
  156. package/lib/AWS/RDS/DBInstance.d.ts.map +1 -1
  157. package/lib/AWS/RDS/DBInstance.js +8 -2
  158. package/lib/AWS/RDS/DBInstance.js.map +1 -1
  159. package/lib/AWS/RDS/DBProxy.d.ts.map +1 -1
  160. package/lib/AWS/RDS/DBProxy.js +4 -1
  161. package/lib/AWS/RDS/DBProxy.js.map +1 -1
  162. package/lib/AWS/RDS/DBProxyEndpoint.d.ts.map +1 -1
  163. package/lib/AWS/RDS/DBProxyEndpoint.js +4 -1
  164. package/lib/AWS/RDS/DBProxyEndpoint.js.map +1 -1
  165. package/lib/AWS/Route53/HealthCheck.d.ts.map +1 -1
  166. package/lib/AWS/Route53/HealthCheck.js +8 -2
  167. package/lib/AWS/Route53/HealthCheck.js.map +1 -1
  168. package/lib/AWS/Route53/HostedZone.d.ts.map +1 -1
  169. package/lib/AWS/Route53/HostedZone.js +8 -2
  170. package/lib/AWS/Route53/HostedZone.js.map +1 -1
  171. package/lib/AWS/Route53/Record.d.ts.map +1 -1
  172. package/lib/AWS/Route53/Record.js +4 -1
  173. package/lib/AWS/Route53/Record.js.map +1 -1
  174. package/lib/AWS/S3/Bucket.d.ts.map +1 -1
  175. package/lib/AWS/S3/Bucket.js +5 -2
  176. package/lib/AWS/S3/Bucket.js.map +1 -1
  177. package/lib/AWS/SQS/Queue.d.ts.map +1 -1
  178. package/lib/AWS/SQS/Queue.js +25 -7
  179. package/lib/AWS/SQS/Queue.js.map +1 -1
  180. package/lib/AWS/StateStore/State.js +5 -2
  181. package/lib/AWS/StateStore/State.js.map +1 -1
  182. package/lib/AWS/Website/AssetDeployment.js +5 -2
  183. package/lib/AWS/Website/AssetDeployment.js.map +1 -1
  184. package/lib/Action.d.ts +8 -0
  185. package/lib/Action.d.ts.map +1 -1
  186. package/lib/Action.js +16 -5
  187. package/lib/Action.js.map +1 -1
  188. package/lib/ActionRuntimeContext.d.ts +14 -0
  189. package/lib/ActionRuntimeContext.d.ts.map +1 -0
  190. package/lib/ActionRuntimeContext.js +56 -0
  191. package/lib/ActionRuntimeContext.js.map +1 -0
  192. package/lib/Apply.d.ts.map +1 -1
  193. package/lib/Apply.js +48 -6
  194. package/lib/Apply.js.map +1 -1
  195. package/lib/Auth/AuthProvider.d.ts +10 -0
  196. package/lib/Auth/AuthProvider.d.ts.map +1 -1
  197. package/lib/Auth/AuthProvider.js +10 -0
  198. package/lib/Auth/AuthProvider.js.map +1 -1
  199. package/lib/Auth/Lock.d.ts.map +1 -1
  200. package/lib/Auth/Lock.js +5 -2
  201. package/lib/Auth/Lock.js.map +1 -1
  202. package/lib/Axiom/AuthProvider.d.ts.map +1 -1
  203. package/lib/Axiom/AuthProvider.js +1 -1
  204. package/lib/Axiom/AuthProvider.js.map +1 -1
  205. package/lib/Bundle/PurePlugin.d.ts.map +1 -1
  206. package/lib/Bundle/PurePlugin.js +26 -1
  207. package/lib/Bundle/PurePlugin.js.map +1 -1
  208. package/lib/Bundle/Vite.d.ts +3 -1
  209. package/lib/Bundle/Vite.d.ts.map +1 -1
  210. package/lib/Bundle/Vite.js +38 -13
  211. package/lib/Bundle/Vite.js.map +1 -1
  212. package/lib/Cli/LoggingCli.d.ts.map +1 -1
  213. package/lib/Cli/LoggingCli.js +7 -4
  214. package/lib/Cli/LoggingCli.js.map +1 -1
  215. package/lib/Cli/commands/_shared.d.ts +74 -5
  216. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  217. package/lib/Cli/commands/_shared.js +84 -2
  218. package/lib/Cli/commands/_shared.js.map +1 -1
  219. package/lib/Cli/commands/login.d.ts +7 -3
  220. package/lib/Cli/commands/login.d.ts.map +1 -1
  221. package/lib/Cli/commands/login.js +71 -24
  222. package/lib/Cli/commands/login.js.map +1 -1
  223. package/lib/Cli/commands/logs.d.ts.map +1 -1
  224. package/lib/Cli/commands/logs.js +1 -0
  225. package/lib/Cli/commands/logs.js.map +1 -1
  226. package/lib/Cli/commands/nuke.d.ts.map +1 -1
  227. package/lib/Cli/commands/nuke.js +15 -24
  228. package/lib/Cli/commands/nuke.js.map +1 -1
  229. package/lib/Cli/commands/profile.d.ts +23 -1
  230. package/lib/Cli/commands/profile.d.ts.map +1 -1
  231. package/lib/Cli/commands/profile.js +46 -22
  232. package/lib/Cli/commands/profile.js.map +1 -1
  233. package/lib/Cli/commands/tail.d.ts.map +1 -1
  234. package/lib/Cli/commands/tail.js +1 -0
  235. package/lib/Cli/commands/tail.js.map +1 -1
  236. package/lib/Cloudflare/AI/GatewayDynamicRouting.d.ts.map +1 -1
  237. package/lib/Cloudflare/AI/GatewayDynamicRouting.js +31 -2
  238. package/lib/Cloudflare/AI/GatewayDynamicRouting.js.map +1 -1
  239. package/lib/Cloudflare/AI/LanguageModel.js +21 -4
  240. package/lib/Cloudflare/AI/LanguageModel.js.map +1 -1
  241. package/lib/Cloudflare/AI/QuerySearchLocal.d.ts +37 -0
  242. package/lib/Cloudflare/AI/QuerySearchLocal.d.ts.map +1 -0
  243. package/lib/Cloudflare/AI/QuerySearchLocal.js +53 -0
  244. package/lib/Cloudflare/AI/QuerySearchLocal.js.map +1 -0
  245. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.d.ts +35 -0
  246. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.d.ts.map +1 -0
  247. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.js +47 -0
  248. package/lib/Cloudflare/AI/QuerySearchNamespaceLocal.js.map +1 -0
  249. package/lib/Cloudflare/AI/SearchHttpClient.d.ts +34 -0
  250. package/lib/Cloudflare/AI/SearchHttpClient.d.ts.map +1 -0
  251. package/lib/Cloudflare/AI/SearchHttpClient.js +262 -0
  252. package/lib/Cloudflare/AI/SearchHttpClient.js.map +1 -0
  253. package/lib/Cloudflare/AI/SearchInstance.js +4 -1
  254. package/lib/Cloudflare/AI/SearchInstance.js.map +1 -1
  255. package/lib/Cloudflare/AI/index.d.ts +2 -0
  256. package/lib/Cloudflare/AI/index.d.ts.map +1 -1
  257. package/lib/Cloudflare/AI/index.js +2 -0
  258. package/lib/Cloudflare/AI/index.js.map +1 -1
  259. package/lib/Cloudflare/Access/Application.d.ts.map +1 -1
  260. package/lib/Cloudflare/Access/Application.js +7 -1
  261. package/lib/Cloudflare/Access/Application.js.map +1 -1
  262. package/lib/Cloudflare/Alerting/Silence.d.ts.map +1 -1
  263. package/lib/Cloudflare/Alerting/Silence.js +4 -1
  264. package/lib/Cloudflare/Alerting/Silence.js.map +1 -1
  265. package/lib/Cloudflare/Alerting/Webhook.d.ts.map +1 -1
  266. package/lib/Cloudflare/Alerting/Webhook.js +8 -2
  267. package/lib/Cloudflare/Alerting/Webhook.js.map +1 -1
  268. package/lib/Cloudflare/Auth/AuthProvider.d.ts.map +1 -1
  269. package/lib/Cloudflare/Auth/AuthProvider.js +23 -8
  270. package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
  271. package/lib/Cloudflare/Auth/OAuthClient.d.ts.map +1 -1
  272. package/lib/Cloudflare/Auth/OAuthClient.js +6 -7
  273. package/lib/Cloudflare/Auth/OAuthClient.js.map +1 -1
  274. package/lib/Cloudflare/Cache/RegionalTieredCache.d.ts.map +1 -1
  275. package/lib/Cloudflare/Cache/RegionalTieredCache.js +7 -1
  276. package/lib/Cloudflare/Cache/RegionalTieredCache.js.map +1 -1
  277. package/lib/Cloudflare/Containers/ContainerApplication.d.ts +18 -2
  278. package/lib/Cloudflare/Containers/ContainerApplication.d.ts.map +1 -1
  279. package/lib/Cloudflare/Containers/ContainerApplication.js +1 -0
  280. package/lib/Cloudflare/Containers/ContainerApplication.js.map +1 -1
  281. package/lib/Cloudflare/Containers/ContainerBundle.d.ts +29 -3
  282. package/lib/Cloudflare/Containers/ContainerBundle.d.ts.map +1 -1
  283. package/lib/Cloudflare/Containers/ContainerBundle.js +84 -23
  284. package/lib/Cloudflare/Containers/ContainerBundle.js.map +1 -1
  285. package/lib/Cloudflare/Containers/ContainerPlatform.d.ts.map +1 -1
  286. package/lib/Cloudflare/Containers/ContainerPlatform.js +12 -33
  287. package/lib/Cloudflare/Containers/ContainerPlatform.js.map +1 -1
  288. package/lib/Cloudflare/Containers/ContainerProvider.d.ts.map +1 -1
  289. package/lib/Cloudflare/Containers/ContainerProvider.js +53 -14
  290. package/lib/Cloudflare/Containers/ContainerProvider.js.map +1 -1
  291. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts +6 -6
  292. package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts.map +1 -1
  293. package/lib/Cloudflare/Containers/LocalContainerProvider.js +69 -47
  294. package/lib/Cloudflare/Containers/LocalContainerProvider.js.map +1 -1
  295. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.d.ts +24 -0
  296. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.d.ts.map +1 -0
  297. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.js +106 -0
  298. package/lib/Cloudflare/D1/QueryDatabaseHttpClient.js.map +1 -0
  299. package/lib/Cloudflare/D1/QueryDatabaseLocal.d.ts +38 -0
  300. package/lib/Cloudflare/D1/QueryDatabaseLocal.d.ts.map +1 -0
  301. package/lib/Cloudflare/D1/QueryDatabaseLocal.js +54 -0
  302. package/lib/Cloudflare/D1/QueryDatabaseLocal.js.map +1 -0
  303. package/lib/Cloudflare/D1/index.d.ts +1 -0
  304. package/lib/Cloudflare/D1/index.d.ts.map +1 -1
  305. package/lib/Cloudflare/D1/index.js +1 -0
  306. package/lib/Cloudflare/D1/index.js.map +1 -1
  307. package/lib/Cloudflare/DNS/DnsHttp.d.ts +16 -1
  308. package/lib/Cloudflare/DNS/DnsHttp.d.ts.map +1 -1
  309. package/lib/Cloudflare/DNS/DnsHttp.js +6 -1
  310. package/lib/Cloudflare/DNS/DnsHttp.js.map +1 -1
  311. package/lib/Cloudflare/DNS/DnsLocal.d.ts +22 -0
  312. package/lib/Cloudflare/DNS/DnsLocal.d.ts.map +1 -0
  313. package/lib/Cloudflare/DNS/DnsLocal.js +31 -0
  314. package/lib/Cloudflare/DNS/DnsLocal.js.map +1 -0
  315. package/lib/Cloudflare/DNS/ReadDnsHttp.d.ts +3 -3
  316. package/lib/Cloudflare/DNS/ReadDnsHttp.d.ts.map +1 -1
  317. package/lib/Cloudflare/DNS/ReadDnsHttp.js +3 -4
  318. package/lib/Cloudflare/DNS/ReadDnsHttp.js.map +1 -1
  319. package/lib/Cloudflare/DNS/ReadDnsLocal.d.ts +32 -0
  320. package/lib/Cloudflare/DNS/ReadDnsLocal.d.ts.map +1 -0
  321. package/lib/Cloudflare/DNS/ReadDnsLocal.js +35 -0
  322. package/lib/Cloudflare/DNS/ReadDnsLocal.js.map +1 -0
  323. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.d.ts +3 -3
  324. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.d.ts.map +1 -1
  325. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.js +4 -4
  326. package/lib/Cloudflare/DNS/ReadWriteDnsHttp.js.map +1 -1
  327. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.d.ts +40 -0
  328. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.d.ts.map +1 -0
  329. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.js +43 -0
  330. package/lib/Cloudflare/DNS/ReadWriteDnsLocal.js.map +1 -0
  331. package/lib/Cloudflare/DNS/WriteDnsHttp.d.ts +3 -3
  332. package/lib/Cloudflare/DNS/WriteDnsHttp.d.ts.map +1 -1
  333. package/lib/Cloudflare/DNS/WriteDnsHttp.js +3 -4
  334. package/lib/Cloudflare/DNS/WriteDnsHttp.js.map +1 -1
  335. package/lib/Cloudflare/DNS/WriteDnsLocal.d.ts +38 -0
  336. package/lib/Cloudflare/DNS/WriteDnsLocal.d.ts.map +1 -0
  337. package/lib/Cloudflare/DNS/WriteDnsLocal.js +41 -0
  338. package/lib/Cloudflare/DNS/WriteDnsLocal.js.map +1 -0
  339. package/lib/Cloudflare/DNS/index.d.ts +3 -0
  340. package/lib/Cloudflare/DNS/index.d.ts.map +1 -1
  341. package/lib/Cloudflare/DNS/index.js +3 -0
  342. package/lib/Cloudflare/DNS/index.js.map +1 -1
  343. package/lib/Cloudflare/Diagnostics/EndpointHealthcheck.js +4 -1
  344. package/lib/Cloudflare/Diagnostics/EndpointHealthcheck.js.map +1 -1
  345. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.d.ts +27 -0
  346. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.d.ts.map +1 -0
  347. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.js +86 -0
  348. package/lib/Cloudflare/Flagship/ReadFlagsHttpClient.js.map +1 -0
  349. package/lib/Cloudflare/Flagship/ReadFlagsLocal.d.ts +41 -0
  350. package/lib/Cloudflare/Flagship/ReadFlagsLocal.d.ts.map +1 -0
  351. package/lib/Cloudflare/Flagship/ReadFlagsLocal.js +57 -0
  352. package/lib/Cloudflare/Flagship/ReadFlagsLocal.js.map +1 -0
  353. package/lib/Cloudflare/Flagship/index.d.ts +1 -0
  354. package/lib/Cloudflare/Flagship/index.d.ts.map +1 -1
  355. package/lib/Cloudflare/Flagship/index.js +1 -0
  356. package/lib/Cloudflare/Flagship/index.js.map +1 -1
  357. package/lib/Cloudflare/Images/Variant.d.ts.map +1 -1
  358. package/lib/Cloudflare/Images/Variant.js +4 -1
  359. package/lib/Cloudflare/Images/Variant.js.map +1 -1
  360. package/lib/Cloudflare/KV/NamespaceHttp.d.ts +16 -1
  361. package/lib/Cloudflare/KV/NamespaceHttp.d.ts.map +1 -1
  362. package/lib/Cloudflare/KV/NamespaceHttp.js +8 -2
  363. package/lib/Cloudflare/KV/NamespaceHttp.js.map +1 -1
  364. package/lib/Cloudflare/KV/NamespaceLocal.d.ts +22 -0
  365. package/lib/Cloudflare/KV/NamespaceLocal.d.ts.map +1 -0
  366. package/lib/Cloudflare/KV/NamespaceLocal.js +32 -0
  367. package/lib/Cloudflare/KV/NamespaceLocal.js.map +1 -0
  368. package/lib/Cloudflare/KV/ReadNamespaceHttp.d.ts +2 -2
  369. package/lib/Cloudflare/KV/ReadNamespaceHttp.d.ts.map +1 -1
  370. package/lib/Cloudflare/KV/ReadNamespaceHttp.js +5 -6
  371. package/lib/Cloudflare/KV/ReadNamespaceHttp.js.map +1 -1
  372. package/lib/Cloudflare/KV/ReadNamespaceLocal.d.ts +27 -0
  373. package/lib/Cloudflare/KV/ReadNamespaceLocal.d.ts.map +1 -0
  374. package/lib/Cloudflare/KV/ReadNamespaceLocal.js +30 -0
  375. package/lib/Cloudflare/KV/ReadNamespaceLocal.js.map +1 -0
  376. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.d.ts +3 -3
  377. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.d.ts.map +1 -1
  378. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.js +6 -6
  379. package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.js.map +1 -1
  380. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.d.ts +34 -0
  381. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.d.ts.map +1 -0
  382. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.js +37 -0
  383. package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.js.map +1 -0
  384. package/lib/Cloudflare/KV/WriteNamespaceHttp.d.ts +2 -2
  385. package/lib/Cloudflare/KV/WriteNamespaceHttp.d.ts.map +1 -1
  386. package/lib/Cloudflare/KV/WriteNamespaceHttp.js +5 -6
  387. package/lib/Cloudflare/KV/WriteNamespaceHttp.js.map +1 -1
  388. package/lib/Cloudflare/KV/WriteNamespaceLocal.d.ts +27 -0
  389. package/lib/Cloudflare/KV/WriteNamespaceLocal.d.ts.map +1 -0
  390. package/lib/Cloudflare/KV/WriteNamespaceLocal.js +30 -0
  391. package/lib/Cloudflare/KV/WriteNamespaceLocal.js.map +1 -0
  392. package/lib/Cloudflare/KV/index.d.ts +3 -0
  393. package/lib/Cloudflare/KV/index.d.ts.map +1 -1
  394. package/lib/Cloudflare/KV/index.js +3 -0
  395. package/lib/Cloudflare/KV/index.js.map +1 -1
  396. package/lib/Cloudflare/LoadBalancer/Monitor.d.ts.map +1 -1
  397. package/lib/Cloudflare/LoadBalancer/Monitor.js +4 -1
  398. package/lib/Cloudflare/LoadBalancer/Monitor.js.map +1 -1
  399. package/lib/Cloudflare/LoadBalancer/MonitorGroup.d.ts.map +1 -1
  400. package/lib/Cloudflare/LoadBalancer/MonitorGroup.js +4 -1
  401. package/lib/Cloudflare/LoadBalancer/MonitorGroup.js.map +1 -1
  402. package/lib/Cloudflare/LoadBalancer/Pool.d.ts.map +1 -1
  403. package/lib/Cloudflare/LoadBalancer/Pool.js +4 -1
  404. package/lib/Cloudflare/LoadBalancer/Pool.js.map +1 -1
  405. package/lib/Cloudflare/LocalRuntime.d.ts +14 -0
  406. package/lib/Cloudflare/LocalRuntime.d.ts.map +1 -1
  407. package/lib/Cloudflare/LocalRuntime.js +1 -0
  408. package/lib/Cloudflare/LocalRuntime.js.map +1 -1
  409. package/lib/Cloudflare/MagicNetworkMonitoring/Rule.d.ts.map +1 -1
  410. package/lib/Cloudflare/MagicNetworkMonitoring/Rule.js +4 -1
  411. package/lib/Cloudflare/MagicNetworkMonitoring/Rule.js.map +1 -1
  412. package/lib/Cloudflare/Pipelines/Pipeline.d.ts.map +1 -1
  413. package/lib/Cloudflare/Pipelines/Pipeline.js +8 -2
  414. package/lib/Cloudflare/Pipelines/Pipeline.js.map +1 -1
  415. package/lib/Cloudflare/Pipelines/Sink.d.ts.map +1 -1
  416. package/lib/Cloudflare/Pipelines/Sink.js +8 -2
  417. package/lib/Cloudflare/Pipelines/Sink.js.map +1 -1
  418. package/lib/Cloudflare/Pipelines/Stream.d.ts.map +1 -1
  419. package/lib/Cloudflare/Pipelines/Stream.js +4 -1
  420. package/lib/Cloudflare/Pipelines/Stream.js.map +1 -1
  421. package/lib/Cloudflare/Providers.js +14 -11
  422. package/lib/Cloudflare/Providers.js.map +1 -1
  423. package/lib/Cloudflare/Queues/Consumer.d.ts.map +1 -1
  424. package/lib/Cloudflare/Queues/Consumer.js +30 -3
  425. package/lib/Cloudflare/Queues/Consumer.js.map +1 -1
  426. package/lib/Cloudflare/Queues/Queue.d.ts.map +1 -1
  427. package/lib/Cloudflare/Queues/Queue.js +4 -1
  428. package/lib/Cloudflare/Queues/Queue.js.map +1 -1
  429. package/lib/Cloudflare/Queues/QueueHttp.d.ts +20 -1
  430. package/lib/Cloudflare/Queues/QueueHttp.d.ts.map +1 -1
  431. package/lib/Cloudflare/Queues/QueueHttp.js +2 -2
  432. package/lib/Cloudflare/Queues/QueueHttp.js.map +1 -1
  433. package/lib/Cloudflare/Queues/WriteQueueHttp.d.ts +9 -3
  434. package/lib/Cloudflare/Queues/WriteQueueHttp.d.ts.map +1 -1
  435. package/lib/Cloudflare/Queues/WriteQueueHttp.js +11 -6
  436. package/lib/Cloudflare/Queues/WriteQueueHttp.js.map +1 -1
  437. package/lib/Cloudflare/Queues/WriteQueueLocal.d.ts +36 -0
  438. package/lib/Cloudflare/Queues/WriteQueueLocal.d.ts.map +1 -0
  439. package/lib/Cloudflare/Queues/WriteQueueLocal.js +51 -0
  440. package/lib/Cloudflare/Queues/WriteQueueLocal.js.map +1 -0
  441. package/lib/Cloudflare/Queues/index.d.ts +1 -0
  442. package/lib/Cloudflare/Queues/index.d.ts.map +1 -1
  443. package/lib/Cloudflare/Queues/index.js +1 -0
  444. package/lib/Cloudflare/Queues/index.js.map +1 -1
  445. package/lib/Cloudflare/R2/Bucket.js +12 -3
  446. package/lib/Cloudflare/R2/Bucket.js.map +1 -1
  447. package/lib/Cloudflare/R2/BucketEventNotification.js +4 -1
  448. package/lib/Cloudflare/R2/BucketEventNotification.js.map +1 -1
  449. package/lib/Cloudflare/R2/BucketHttp.d.ts +15 -1
  450. package/lib/Cloudflare/R2/BucketHttp.d.ts.map +1 -1
  451. package/lib/Cloudflare/R2/BucketHttp.js +3 -3
  452. package/lib/Cloudflare/R2/BucketHttp.js.map +1 -1
  453. package/lib/Cloudflare/R2/BucketLocal.d.ts +21 -0
  454. package/lib/Cloudflare/R2/BucketLocal.d.ts.map +1 -0
  455. package/lib/Cloudflare/R2/BucketLocal.js +32 -0
  456. package/lib/Cloudflare/R2/BucketLocal.js.map +1 -0
  457. package/lib/Cloudflare/R2/DataCatalog.js +4 -1
  458. package/lib/Cloudflare/R2/DataCatalog.js.map +1 -1
  459. package/lib/Cloudflare/R2/ReadBucketHttp.d.ts +2 -2
  460. package/lib/Cloudflare/R2/ReadBucketHttp.d.ts.map +1 -1
  461. package/lib/Cloudflare/R2/ReadBucketHttp.js +4 -4
  462. package/lib/Cloudflare/R2/ReadBucketHttp.js.map +1 -1
  463. package/lib/Cloudflare/R2/ReadBucketLocal.d.ts +27 -0
  464. package/lib/Cloudflare/R2/ReadBucketLocal.d.ts.map +1 -0
  465. package/lib/Cloudflare/R2/ReadBucketLocal.js +30 -0
  466. package/lib/Cloudflare/R2/ReadBucketLocal.js.map +1 -0
  467. package/lib/Cloudflare/R2/ReadWriteBucketHttp.d.ts +2 -2
  468. package/lib/Cloudflare/R2/ReadWriteBucketHttp.d.ts.map +1 -1
  469. package/lib/Cloudflare/R2/ReadWriteBucketHttp.js +5 -4
  470. package/lib/Cloudflare/R2/ReadWriteBucketHttp.js.map +1 -1
  471. package/lib/Cloudflare/R2/ReadWriteBucketLocal.d.ts +30 -0
  472. package/lib/Cloudflare/R2/ReadWriteBucketLocal.d.ts.map +1 -0
  473. package/lib/Cloudflare/R2/ReadWriteBucketLocal.js +33 -0
  474. package/lib/Cloudflare/R2/ReadWriteBucketLocal.js.map +1 -0
  475. package/lib/Cloudflare/R2/WriteBucketHttp.d.ts +2 -2
  476. package/lib/Cloudflare/R2/WriteBucketHttp.d.ts.map +1 -1
  477. package/lib/Cloudflare/R2/WriteBucketHttp.js +4 -4
  478. package/lib/Cloudflare/R2/WriteBucketHttp.js.map +1 -1
  479. package/lib/Cloudflare/R2/WriteBucketLocal.d.ts +27 -0
  480. package/lib/Cloudflare/R2/WriteBucketLocal.d.ts.map +1 -0
  481. package/lib/Cloudflare/R2/WriteBucketLocal.js +30 -0
  482. package/lib/Cloudflare/R2/WriteBucketLocal.js.map +1 -0
  483. package/lib/Cloudflare/R2/index.d.ts +3 -0
  484. package/lib/Cloudflare/R2/index.d.ts.map +1 -1
  485. package/lib/Cloudflare/R2/index.js +3 -0
  486. package/lib/Cloudflare/R2/index.js.map +1 -1
  487. package/lib/Cloudflare/Rum/Rule.d.ts.map +1 -1
  488. package/lib/Cloudflare/Rum/Rule.js +4 -1
  489. package/lib/Cloudflare/Rum/Rule.js.map +1 -1
  490. package/lib/Cloudflare/Snippets/Snippet.d.ts.map +1 -1
  491. package/lib/Cloudflare/Snippets/Snippet.js +4 -1
  492. package/lib/Cloudflare/Snippets/Snippet.js.map +1 -1
  493. package/lib/Cloudflare/StateStore/Api.d.ts +2 -0
  494. package/lib/Cloudflare/StateStore/CredentialsFile.d.ts +42 -0
  495. package/lib/Cloudflare/StateStore/CredentialsFile.d.ts.map +1 -0
  496. package/lib/Cloudflare/StateStore/CredentialsFile.js +23 -0
  497. package/lib/Cloudflare/StateStore/CredentialsFile.js.map +1 -0
  498. package/lib/Cloudflare/StateStore/State.d.ts +2 -2
  499. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
  500. package/lib/Cloudflare/StateStore/State.js +46 -9
  501. package/lib/Cloudflare/StateStore/State.js.map +1 -1
  502. package/lib/Cloudflare/Tags/ZoneResourceTags.d.ts.map +1 -1
  503. package/lib/Cloudflare/Tags/ZoneResourceTags.js +4 -1
  504. package/lib/Cloudflare/Tags/ZoneResourceTags.js.map +1 -1
  505. package/lib/Cloudflare/Tunnel/ReadTunnel.d.ts +3 -3
  506. package/lib/Cloudflare/Tunnel/ReadTunnel.d.ts.map +1 -1
  507. package/lib/Cloudflare/Tunnel/ReadTunnel.js +7 -8
  508. package/lib/Cloudflare/Tunnel/ReadTunnel.js.map +1 -1
  509. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.d.ts +29 -0
  510. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.d.ts.map +1 -0
  511. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.js +30 -0
  512. package/lib/Cloudflare/Tunnel/ReadTunnelLocal.js.map +1 -0
  513. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.d.ts +3 -3
  514. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.d.ts.map +1 -1
  515. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.js +4 -4
  516. package/lib/Cloudflare/Tunnel/ReadWriteTunnel.js.map +1 -1
  517. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.d.ts +35 -0
  518. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.d.ts.map +1 -0
  519. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.js +36 -0
  520. package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.js.map +1 -0
  521. package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts +17 -1
  522. package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts.map +1 -1
  523. package/lib/Cloudflare/Tunnel/TunnelBinding.js +7 -1
  524. package/lib/Cloudflare/Tunnel/TunnelBinding.js.map +1 -1
  525. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.d.ts +19 -0
  526. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.d.ts.map +1 -0
  527. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.js +29 -0
  528. package/lib/Cloudflare/Tunnel/TunnelLocalBinding.js.map +1 -0
  529. package/lib/Cloudflare/Tunnel/WarpConnector.d.ts +3 -3
  530. package/lib/Cloudflare/Tunnel/WarpConnector.d.ts.map +1 -1
  531. package/lib/Cloudflare/Tunnel/WarpConnector.js +7 -4
  532. package/lib/Cloudflare/Tunnel/WarpConnector.js.map +1 -1
  533. package/lib/Cloudflare/Tunnel/WriteTunnel.d.ts +3 -3
  534. package/lib/Cloudflare/Tunnel/WriteTunnel.d.ts.map +1 -1
  535. package/lib/Cloudflare/Tunnel/WriteTunnel.js +7 -8
  536. package/lib/Cloudflare/Tunnel/WriteTunnel.js.map +1 -1
  537. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.d.ts +29 -0
  538. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.d.ts.map +1 -0
  539. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.js +30 -0
  540. package/lib/Cloudflare/Tunnel/WriteTunnelLocal.js.map +1 -0
  541. package/lib/Cloudflare/Tunnel/index.d.ts +3 -0
  542. package/lib/Cloudflare/Tunnel/index.d.ts.map +1 -1
  543. package/lib/Cloudflare/Tunnel/index.js +3 -0
  544. package/lib/Cloudflare/Tunnel/index.js.map +1 -1
  545. package/lib/Cloudflare/UrlNormalization/UrlNormalization.d.ts.map +1 -1
  546. package/lib/Cloudflare/UrlNormalization/UrlNormalization.js +7 -1
  547. package/lib/Cloudflare/UrlNormalization/UrlNormalization.js.map +1 -1
  548. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.d.ts +30 -0
  549. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.d.ts.map +1 -0
  550. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.js +100 -0
  551. package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.js.map +1 -0
  552. package/lib/Cloudflare/Vectorize/SearchIndexLocal.d.ts +42 -0
  553. package/lib/Cloudflare/Vectorize/SearchIndexLocal.d.ts.map +1 -0
  554. package/lib/Cloudflare/Vectorize/SearchIndexLocal.js +58 -0
  555. package/lib/Cloudflare/Vectorize/SearchIndexLocal.js.map +1 -0
  556. package/lib/Cloudflare/Vectorize/index.d.ts +1 -0
  557. package/lib/Cloudflare/Vectorize/index.d.ts.map +1 -1
  558. package/lib/Cloudflare/Vectorize/index.js +1 -0
  559. package/lib/Cloudflare/Vectorize/index.js.map +1 -1
  560. package/lib/Cloudflare/WaitingRoom/Settings.d.ts.map +1 -1
  561. package/lib/Cloudflare/WaitingRoom/Settings.js +7 -1
  562. package/lib/Cloudflare/WaitingRoom/Settings.js.map +1 -1
  563. package/lib/Cloudflare/Website/Vite.d.ts +19 -0
  564. package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
  565. package/lib/Cloudflare/Website/Vite.js +20 -0
  566. package/lib/Cloudflare/Website/Vite.js.map +1 -1
  567. package/lib/Cloudflare/Workers/BrowserHttpClient.d.ts +32 -0
  568. package/lib/Cloudflare/Workers/BrowserHttpClient.d.ts.map +1 -0
  569. package/lib/Cloudflare/Workers/BrowserHttpClient.js +100 -0
  570. package/lib/Cloudflare/Workers/BrowserHttpClient.js.map +1 -0
  571. package/lib/Cloudflare/Workers/BrowserLocal.d.ts +37 -0
  572. package/lib/Cloudflare/Workers/BrowserLocal.d.ts.map +1 -0
  573. package/lib/Cloudflare/Workers/BrowserLocal.js +53 -0
  574. package/lib/Cloudflare/Workers/BrowserLocal.js.map +1 -0
  575. package/lib/Cloudflare/Workers/Compatibility.d.ts.map +1 -1
  576. package/lib/Cloudflare/Workers/Compatibility.js +43 -7
  577. package/lib/Cloudflare/Workers/Compatibility.js.map +1 -1
  578. package/lib/Cloudflare/Workers/ConfigProvider.d.ts +8 -0
  579. package/lib/Cloudflare/Workers/ConfigProvider.d.ts.map +1 -1
  580. package/lib/Cloudflare/Workers/ConfigProvider.js +10 -1
  581. package/lib/Cloudflare/Workers/ConfigProvider.js.map +1 -1
  582. package/lib/Cloudflare/Workers/CronEventSource.d.ts +3 -2
  583. package/lib/Cloudflare/Workers/CronEventSource.d.ts.map +1 -1
  584. package/lib/Cloudflare/Workers/CronEventSource.js.map +1 -1
  585. package/lib/Cloudflare/Workers/DurableObject.d.ts +137 -3
  586. package/lib/Cloudflare/Workers/DurableObject.d.ts.map +1 -1
  587. package/lib/Cloudflare/Workers/DurableObject.js +141 -6
  588. package/lib/Cloudflare/Workers/DurableObject.js.map +1 -1
  589. package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
  590. package/lib/Cloudflare/Workers/DurableObjectBridge.js +86 -82
  591. package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
  592. package/lib/Cloudflare/Workers/HttpServer.d.ts +1 -4
  593. package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
  594. package/lib/Cloudflare/Workers/HttpServer.js +1 -3
  595. package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
  596. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +2 -185
  597. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  598. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +74 -11
  599. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  600. package/lib/Cloudflare/Workers/ObservabilityDestination.d.ts.map +1 -1
  601. package/lib/Cloudflare/Workers/ObservabilityDestination.js +4 -1
  602. package/lib/Cloudflare/Workers/ObservabilityDestination.js.map +1 -1
  603. package/lib/Cloudflare/Workers/Vite.d.ts +1 -1
  604. package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
  605. package/lib/Cloudflare/Workers/Vite.js +81 -2
  606. package/lib/Cloudflare/Workers/Vite.js.map +1 -1
  607. package/lib/Cloudflare/Workers/Worker.d.ts +42 -6
  608. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  609. package/lib/Cloudflare/Workers/Worker.js +10 -5
  610. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  611. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  612. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +26 -16
  613. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  614. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +22 -1
  615. package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
  616. package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
  617. package/lib/Cloudflare/Workers/WorkerBridge.d.ts +13 -5
  618. package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
  619. package/lib/Cloudflare/Workers/WorkerBridge.js +133 -52
  620. package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
  621. package/lib/Cloudflare/Workers/WorkerProvider.d.ts +81 -0
  622. package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
  623. package/lib/Cloudflare/Workers/WorkerProvider.js +476 -68
  624. package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
  625. package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
  626. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +11 -37
  627. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
  628. package/lib/Cloudflare/Workers/cloudflare_workers.d.ts.map +1 -1
  629. package/lib/Cloudflare/Workers/cloudflare_workers.js +10 -3
  630. package/lib/Cloudflare/Workers/cloudflare_workers.js.map +1 -1
  631. package/lib/Cloudflare/Workers/index.d.ts +1 -0
  632. package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
  633. package/lib/Cloudflare/Workers/index.js +1 -0
  634. package/lib/Cloudflare/Workers/index.js.map +1 -1
  635. package/lib/Cloudflare/Workflows/Workflow.d.ts +10 -7
  636. package/lib/Cloudflare/Workflows/Workflow.d.ts.map +1 -1
  637. package/lib/Cloudflare/Workflows/Workflow.js +38 -13
  638. package/lib/Cloudflare/Workflows/Workflow.js.map +1 -1
  639. package/lib/Cloudflare/Workflows/WorkflowBridge.d.ts.map +1 -1
  640. package/lib/Cloudflare/Workflows/WorkflowBridge.js +39 -37
  641. package/lib/Cloudflare/Workflows/WorkflowBridge.js.map +1 -1
  642. package/lib/Cloudflare/Workflows/WorkflowName.d.ts +11 -0
  643. package/lib/Cloudflare/Workflows/WorkflowName.d.ts.map +1 -0
  644. package/lib/Cloudflare/Workflows/WorkflowName.js +28 -0
  645. package/lib/Cloudflare/Workflows/WorkflowName.js.map +1 -0
  646. package/lib/Cloudflare/Zone/Hold.d.ts.map +1 -1
  647. package/lib/Cloudflare/Zone/Hold.js +7 -1
  648. package/lib/Cloudflare/Zone/Hold.js.map +1 -1
  649. package/lib/Command/Dev.d.ts +16 -6
  650. package/lib/Command/Dev.d.ts.map +1 -1
  651. package/lib/Command/Dev.js +37 -7
  652. package/lib/Command/Dev.js.map +1 -1
  653. package/lib/Diff.d.ts +16 -0
  654. package/lib/Diff.d.ts.map +1 -1
  655. package/lib/Diff.js +33 -0
  656. package/lib/Diff.js.map +1 -1
  657. package/lib/Docker/Container.js +4 -1
  658. package/lib/Docker/Container.js.map +1 -1
  659. package/lib/Drizzle/Postgres.d.ts +14 -13
  660. package/lib/Drizzle/Postgres.d.ts.map +1 -1
  661. package/lib/Drizzle/Postgres.js +39 -19
  662. package/lib/Drizzle/Postgres.js.map +1 -1
  663. package/lib/GitHub/AuthProvider.d.ts.map +1 -1
  664. package/lib/GitHub/AuthProvider.js +1 -1
  665. package/lib/GitHub/AuthProvider.js.map +1 -1
  666. package/lib/GitHub/Env.d.ts +20 -0
  667. package/lib/GitHub/Env.d.ts.map +1 -0
  668. package/lib/GitHub/Env.js +27 -0
  669. package/lib/GitHub/Env.js.map +1 -0
  670. package/lib/GitHub/Secrets.d.ts +1 -1
  671. package/lib/GitHub/Secrets.js +1 -1
  672. package/lib/GitHub/Variables.d.ts +1 -1
  673. package/lib/GitHub/Variables.js +1 -1
  674. package/lib/GitHub/index.d.ts +1 -0
  675. package/lib/GitHub/index.d.ts.map +1 -1
  676. package/lib/GitHub/index.js +1 -0
  677. package/lib/GitHub/index.js.map +1 -1
  678. package/lib/Http.d.ts +9 -0
  679. package/lib/Http.d.ts.map +1 -1
  680. package/lib/Http.js +9 -0
  681. package/lib/Http.js.map +1 -1
  682. package/lib/Local/RpcProviderProxy.js +1 -1
  683. package/lib/Local/RpcProviderProxy.js.map +1 -1
  684. package/lib/Local/RpcSerialization.d.ts.map +1 -1
  685. package/lib/Local/RpcSerialization.js +6 -2
  686. package/lib/Local/RpcSerialization.js.map +1 -1
  687. package/lib/Local/RpcSpawner.d.ts.map +1 -1
  688. package/lib/Local/RpcSpawner.js +14 -8
  689. package/lib/Local/RpcSpawner.js.map +1 -1
  690. package/lib/Neon/AuthProvider.d.ts.map +1 -1
  691. package/lib/Neon/AuthProvider.js +2 -2
  692. package/lib/Neon/AuthProvider.js.map +1 -1
  693. package/lib/Neon/Project.js +4 -1
  694. package/lib/Neon/Project.js.map +1 -1
  695. package/lib/Plan.d.ts.map +1 -1
  696. package/lib/Plan.js +37 -13
  697. package/lib/Plan.js.map +1 -1
  698. package/lib/Planetscale/AuthProvider.d.ts +26 -9
  699. package/lib/Planetscale/AuthProvider.d.ts.map +1 -1
  700. package/lib/Planetscale/AuthProvider.js +142 -11
  701. package/lib/Planetscale/AuthProvider.js.map +1 -1
  702. package/lib/Planetscale/Branch.d.ts.map +1 -1
  703. package/lib/Planetscale/Branch.js +4 -1
  704. package/lib/Planetscale/Branch.js.map +1 -1
  705. package/lib/Planetscale/Credentials.d.ts.map +1 -1
  706. package/lib/Planetscale/Credentials.js +14 -6
  707. package/lib/Planetscale/Credentials.js.map +1 -1
  708. package/lib/Planetscale/Database.d.ts +2 -1
  709. package/lib/Planetscale/Database.d.ts.map +1 -1
  710. package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts +41 -3
  711. package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts.map +1 -1
  712. package/lib/Planetscale/MySQL/MySQLClusterSize.js +88 -11
  713. package/lib/Planetscale/MySQL/MySQLClusterSize.js.map +1 -1
  714. package/lib/Planetscale/MySQL/MySQLDatabase.d.ts +14 -0
  715. package/lib/Planetscale/MySQL/MySQLDatabase.d.ts.map +1 -1
  716. package/lib/Planetscale/MySQL/MySQLDatabase.js +24 -11
  717. package/lib/Planetscale/MySQL/MySQLDatabase.js.map +1 -1
  718. package/lib/Planetscale/MySQL/MySQLMigrations.js +4 -1
  719. package/lib/Planetscale/MySQL/MySQLMigrations.js.map +1 -1
  720. package/lib/Planetscale/OAuthClient.d.ts +72 -0
  721. package/lib/Planetscale/OAuthClient.d.ts.map +1 -0
  722. package/lib/Planetscale/OAuthClient.js +227 -0
  723. package/lib/Planetscale/OAuthClient.js.map +1 -0
  724. package/lib/Planetscale/Postgres/PostgresClusterSize.d.ts.map +1 -1
  725. package/lib/Planetscale/Postgres/PostgresClusterSize.js +4 -1
  726. package/lib/Planetscale/Postgres/PostgresClusterSize.js.map +1 -1
  727. package/lib/Planetscale/Postgres/PostgresMigrations.js +4 -1
  728. package/lib/Planetscale/Postgres/PostgresMigrations.js.map +1 -1
  729. package/lib/Planetscale/Util.d.ts.map +1 -1
  730. package/lib/Planetscale/Util.js +4 -1
  731. package/lib/Planetscale/Util.js.map +1 -1
  732. package/lib/Platform.d.ts +2 -3
  733. package/lib/Platform.d.ts.map +1 -1
  734. package/lib/Platform.js +62 -3
  735. package/lib/Platform.js.map +1 -1
  736. package/lib/Provider.d.ts +35 -0
  737. package/lib/Provider.d.ts.map +1 -1
  738. package/lib/Provider.js.map +1 -1
  739. package/lib/Runtime.d.ts +23 -0
  740. package/lib/Runtime.d.ts.map +1 -1
  741. package/lib/Runtime.js +83 -0
  742. package/lib/Runtime.js.map +1 -1
  743. package/lib/RuntimeContext.d.ts +46 -0
  744. package/lib/RuntimeContext.d.ts.map +1 -1
  745. package/lib/RuntimeContext.js +60 -0
  746. package/lib/RuntimeContext.js.map +1 -1
  747. package/lib/Server/Process.d.ts +1 -1
  748. package/lib/Server/Process.d.ts.map +1 -1
  749. package/lib/Server/Process.js +8 -8
  750. package/lib/Server/Process.js.map +1 -1
  751. package/lib/Stack.js +1 -1
  752. package/lib/Stack.js.map +1 -1
  753. package/lib/State/HttpStateApi.d.ts +10 -10
  754. package/lib/State/HttpStateStore.js +5 -2
  755. package/lib/State/HttpStateStore.js.map +1 -1
  756. package/lib/Sync.d.ts.map +1 -1
  757. package/lib/Sync.js +3 -0
  758. package/lib/Sync.js.map +1 -1
  759. package/lib/Test/Alchemy.d.ts +74 -0
  760. package/lib/Test/Alchemy.d.ts.map +1 -0
  761. package/lib/Test/Alchemy.js +143 -0
  762. package/lib/Test/Alchemy.js.map +1 -0
  763. package/lib/Test/Http.d.ts.map +1 -1
  764. package/lib/Test/Http.js +8 -2
  765. package/lib/Test/Http.js.map +1 -1
  766. package/lib/Util/cached-function.d.ts +1 -1
  767. package/lib/Util/cached-function.d.ts.map +1 -1
  768. package/lib/Util/cached-function.js +2 -2
  769. package/lib/Util/cached-function.js.map +1 -1
  770. package/lib/Util/data.d.ts +6 -1
  771. package/lib/Util/data.d.ts.map +1 -1
  772. package/lib/Util/data.js.map +1 -1
  773. package/lib/Util/poll.js +1 -1
  774. package/lib/Util/poll.js.map +1 -1
  775. package/lib/Util/proxy-chain.js +3 -0
  776. package/lib/Util/proxy-chain.js.map +1 -1
  777. package/package.json +23 -23
  778. package/src/AWS/ACM/Certificate.ts +16 -12
  779. package/src/AWS/ApiGateway/common.ts +11 -8
  780. package/src/AWS/AuthProvider.ts +1 -4
  781. package/src/AWS/AutoScaling/AutoScalingGroup.ts +8 -6
  782. package/src/AWS/Bootstrap.ts +5 -6
  783. package/src/AWS/CloudFront/Distribution.ts +20 -16
  784. package/src/AWS/CloudFront/Function.ts +10 -6
  785. package/src/AWS/CloudFront/Invalidation.ts +4 -3
  786. package/src/AWS/CloudFront/KvEntries.ts +4 -3
  787. package/src/AWS/CloudFront/KvRoutesUpdate.ts +8 -6
  788. package/src/AWS/CloudFront/VpcOrigin.ts +12 -9
  789. package/src/AWS/CloudFront/common.ts +10 -6
  790. package/src/AWS/CloudWatch/AnomalyDetector.ts +4 -3
  791. package/src/AWS/CloudWatch/common.ts +1 -3
  792. package/src/AWS/DynamoDB/Table.ts +57 -47
  793. package/src/AWS/EC2/EIP.ts +6 -4
  794. package/src/AWS/EC2/EgressOnlyInternetGateway.ts +6 -4
  795. package/src/AWS/EC2/Instance.ts +12 -9
  796. package/src/AWS/EC2/InternetGateway.ts +18 -12
  797. package/src/AWS/EC2/NatGateway.ts +6 -10
  798. package/src/AWS/EC2/NetworkAcl.ts +6 -4
  799. package/src/AWS/EC2/NetworkAclEntry.ts +4 -3
  800. package/src/AWS/EC2/RouteTable.ts +12 -9
  801. package/src/AWS/EC2/RouteTableAssociation.ts +3 -5
  802. package/src/AWS/EC2/SecurityGroup.ts +10 -7
  803. package/src/AWS/EC2/Subnet.ts +15 -15
  804. package/src/AWS/EC2/Vpc.ts +12 -12
  805. package/src/AWS/EC2/VpcEndpoint.ts +6 -8
  806. package/src/AWS/EC2/hosted.ts +2 -1
  807. package/src/AWS/ECS/Service.ts +4 -3
  808. package/src/AWS/ECS/Task.ts +2 -1
  809. package/src/AWS/EKS/Addon.ts +8 -6
  810. package/src/AWS/EKS/Cluster.ts +4 -3
  811. package/src/AWS/ELBv2/TargetGroup.ts +4 -3
  812. package/src/AWS/ELBv2/TrustStore.ts +4 -3
  813. package/src/AWS/IAM/SAMLProvider.ts +4 -4
  814. package/src/AWS/IdentityCenter/AccountAssignment.ts +8 -6
  815. package/src/AWS/IdentityCenter/common.ts +1 -3
  816. package/src/AWS/KMS/Alias.ts +4 -3
  817. package/src/AWS/KMS/Key.ts +4 -3
  818. package/src/AWS/Kinesis/Stream.ts +2 -6
  819. package/src/AWS/Kinesis/StreamConsumer.ts +7 -12
  820. package/src/AWS/Lambda/Alias.ts +4 -3
  821. package/src/AWS/Lambda/EventInvokeConfig.ts +2 -6
  822. package/src/AWS/Lambda/EventSourceMapping.ts +10 -8
  823. package/src/AWS/Lambda/Function.ts +123 -77
  824. package/src/AWS/Lambda/MicrovmProvider.ts +18 -16
  825. package/src/AWS/Lambda/MicrovmRuntimeContext.ts +11 -38
  826. package/src/AWS/Lambda/NetworkConnector.ts +19 -15
  827. package/src/AWS/Lambda/RuntimeExtension.ts +46 -0
  828. package/src/AWS/Organizations/Account.ts +5 -6
  829. package/src/AWS/Organizations/common.ts +1 -3
  830. package/src/AWS/Providers.ts +22 -20
  831. package/src/AWS/RDS/DBCluster.ts +8 -6
  832. package/src/AWS/RDS/DBInstance.ts +8 -6
  833. package/src/AWS/RDS/DBProxy.ts +4 -3
  834. package/src/AWS/RDS/DBProxyEndpoint.ts +4 -3
  835. package/src/AWS/Route53/HealthCheck.ts +8 -6
  836. package/src/AWS/Route53/HostedZone.ts +8 -6
  837. package/src/AWS/Route53/Record.ts +4 -3
  838. package/src/AWS/S3/Bucket.ts +5 -4
  839. package/src/AWS/SQS/Queue.ts +26 -20
  840. package/src/AWS/StateStore/State.ts +5 -4
  841. package/src/AWS/Website/AssetDeployment.ts +10 -6
  842. package/src/Action.ts +39 -6
  843. package/src/ActionRuntimeContext.ts +68 -0
  844. package/src/Apply.ts +54 -8
  845. package/src/Auth/AuthProvider.ts +11 -0
  846. package/src/Auth/Lock.ts +5 -2
  847. package/src/Axiom/AuthProvider.ts +0 -3
  848. package/src/Bundle/PurePlugin.ts +34 -1
  849. package/src/Bundle/Vite.ts +67 -16
  850. package/src/Cli/LoggingCli.ts +7 -4
  851. package/src/Cli/commands/_shared.ts +171 -5
  852. package/src/Cli/commands/login.ts +91 -46
  853. package/src/Cli/commands/logs.ts +1 -0
  854. package/src/Cli/commands/nuke.ts +16 -44
  855. package/src/Cli/commands/profile.ts +67 -39
  856. package/src/Cli/commands/tail.ts +1 -0
  857. package/src/Cloudflare/AI/GatewayDynamicRouting.ts +38 -6
  858. package/src/Cloudflare/AI/LanguageModel.ts +25 -5
  859. package/src/Cloudflare/AI/QuerySearchLocal.ts +66 -0
  860. package/src/Cloudflare/AI/QuerySearchNamespaceLocal.ts +60 -0
  861. package/src/Cloudflare/AI/SearchHttpClient.ts +423 -0
  862. package/src/Cloudflare/AI/SearchInstance.ts +4 -3
  863. package/src/Cloudflare/AI/index.ts +2 -0
  864. package/src/Cloudflare/Access/Application.ts +7 -4
  865. package/src/Cloudflare/Alerting/Silence.ts +4 -3
  866. package/src/Cloudflare/Alerting/Webhook.ts +8 -6
  867. package/src/Cloudflare/Auth/AuthProvider.ts +55 -39
  868. package/src/Cloudflare/Auth/OAuthClient.ts +6 -7
  869. package/src/Cloudflare/Cache/RegionalTieredCache.ts +7 -4
  870. package/src/Cloudflare/Containers/ContainerApplication.ts +22 -2
  871. package/src/Cloudflare/Containers/ContainerBundle.ts +110 -34
  872. package/src/Cloudflare/Containers/ContainerPlatform.ts +14 -52
  873. package/src/Cloudflare/Containers/ContainerProvider.ts +73 -19
  874. package/src/Cloudflare/Containers/LocalContainerProvider.ts +78 -72
  875. package/src/Cloudflare/D1/QueryDatabaseHttpClient.ts +176 -0
  876. package/src/Cloudflare/D1/QueryDatabaseLocal.ts +66 -0
  877. package/src/Cloudflare/D1/index.ts +1 -0
  878. package/src/Cloudflare/DNS/DnsHttp.ts +24 -2
  879. package/src/Cloudflare/DNS/DnsLocal.ts +41 -0
  880. package/src/Cloudflare/DNS/ReadDnsHttp.ts +4 -5
  881. package/src/Cloudflare/DNS/ReadDnsLocal.ts +38 -0
  882. package/src/Cloudflare/DNS/ReadWriteDnsHttp.ts +5 -5
  883. package/src/Cloudflare/DNS/ReadWriteDnsLocal.ts +46 -0
  884. package/src/Cloudflare/DNS/WriteDnsHttp.ts +4 -5
  885. package/src/Cloudflare/DNS/WriteDnsLocal.ts +44 -0
  886. package/src/Cloudflare/DNS/index.ts +3 -0
  887. package/src/Cloudflare/Diagnostics/EndpointHealthcheck.ts +4 -3
  888. package/src/Cloudflare/Flagship/ReadFlagsHttpClient.ts +183 -0
  889. package/src/Cloudflare/Flagship/ReadFlagsLocal.ts +69 -0
  890. package/src/Cloudflare/Flagship/index.ts +1 -0
  891. package/src/Cloudflare/Images/Variant.ts +4 -3
  892. package/src/Cloudflare/KV/NamespaceHttp.ts +25 -2
  893. package/src/Cloudflare/KV/NamespaceLocal.ts +42 -0
  894. package/src/Cloudflare/KV/ReadNamespaceHttp.ts +7 -6
  895. package/src/Cloudflare/KV/ReadNamespaceLocal.ts +35 -0
  896. package/src/Cloudflare/KV/ReadWriteNamespaceHttp.ts +11 -6
  897. package/src/Cloudflare/KV/ReadWriteNamespaceLocal.ts +42 -0
  898. package/src/Cloudflare/KV/WriteNamespaceHttp.ts +7 -6
  899. package/src/Cloudflare/KV/WriteNamespaceLocal.ts +35 -0
  900. package/src/Cloudflare/KV/index.ts +3 -0
  901. package/src/Cloudflare/LoadBalancer/Monitor.ts +4 -3
  902. package/src/Cloudflare/LoadBalancer/MonitorGroup.ts +4 -3
  903. package/src/Cloudflare/LoadBalancer/Pool.ts +4 -3
  904. package/src/Cloudflare/LocalRuntime.ts +17 -0
  905. package/src/Cloudflare/MagicNetworkMonitoring/Rule.ts +4 -3
  906. package/src/Cloudflare/Pipelines/Pipeline.ts +8 -6
  907. package/src/Cloudflare/Pipelines/Sink.ts +8 -6
  908. package/src/Cloudflare/Pipelines/Stream.ts +4 -3
  909. package/src/Cloudflare/Providers.ts +21 -19
  910. package/src/Cloudflare/Queues/Consumer.ts +45 -9
  911. package/src/Cloudflare/Queues/Queue.ts +4 -3
  912. package/src/Cloudflare/Queues/QueueHttp.ts +24 -2
  913. package/src/Cloudflare/Queues/WriteQueueHttp.ts +16 -7
  914. package/src/Cloudflare/Queues/WriteQueueLocal.ts +64 -0
  915. package/src/Cloudflare/Queues/index.ts +1 -0
  916. package/src/Cloudflare/R2/Bucket.ts +12 -9
  917. package/src/Cloudflare/R2/BucketEventNotification.ts +4 -3
  918. package/src/Cloudflare/R2/BucketHttp.ts +20 -3
  919. package/src/Cloudflare/R2/BucketLocal.ts +47 -0
  920. package/src/Cloudflare/R2/DataCatalog.ts +4 -3
  921. package/src/Cloudflare/R2/ReadBucketHttp.ts +10 -5
  922. package/src/Cloudflare/R2/ReadBucketLocal.ts +33 -0
  923. package/src/Cloudflare/R2/ReadWriteBucketHttp.ts +11 -5
  924. package/src/Cloudflare/R2/ReadWriteBucketLocal.ts +36 -0
  925. package/src/Cloudflare/R2/WriteBucketHttp.ts +10 -5
  926. package/src/Cloudflare/R2/WriteBucketLocal.ts +33 -0
  927. package/src/Cloudflare/R2/index.ts +3 -0
  928. package/src/Cloudflare/Rum/Rule.ts +4 -3
  929. package/src/Cloudflare/Snippets/Snippet.ts +4 -3
  930. package/src/Cloudflare/StateStore/CredentialsFile.ts +48 -0
  931. package/src/Cloudflare/StateStore/State.ts +61 -25
  932. package/src/Cloudflare/Tags/ZoneResourceTags.ts +4 -3
  933. package/src/Cloudflare/Tunnel/ReadTunnel.ts +8 -9
  934. package/src/Cloudflare/Tunnel/ReadTunnelLocal.ts +33 -0
  935. package/src/Cloudflare/Tunnel/ReadWriteTunnel.ts +5 -5
  936. package/src/Cloudflare/Tunnel/ReadWriteTunnelLocal.ts +39 -0
  937. package/src/Cloudflare/Tunnel/TunnelBinding.ts +26 -2
  938. package/src/Cloudflare/Tunnel/TunnelLocalBinding.ts +38 -0
  939. package/src/Cloudflare/Tunnel/WarpConnector.ts +8 -5
  940. package/src/Cloudflare/Tunnel/WriteTunnel.ts +8 -9
  941. package/src/Cloudflare/Tunnel/WriteTunnelLocal.ts +33 -0
  942. package/src/Cloudflare/Tunnel/index.ts +3 -0
  943. package/src/Cloudflare/UrlNormalization/UrlNormalization.ts +7 -4
  944. package/src/Cloudflare/Vectorize/SearchIndexHttpClient.ts +183 -0
  945. package/src/Cloudflare/Vectorize/SearchIndexLocal.ts +70 -0
  946. package/src/Cloudflare/Vectorize/index.ts +1 -0
  947. package/src/Cloudflare/WaitingRoom/Settings.ts +7 -4
  948. package/src/Cloudflare/Website/Vite.ts +20 -0
  949. package/src/Cloudflare/Workers/BrowserHttpClient.ts +201 -0
  950. package/src/Cloudflare/Workers/BrowserLocal.ts +65 -0
  951. package/src/Cloudflare/Workers/Compatibility.ts +50 -7
  952. package/src/Cloudflare/Workers/ConfigProvider.ts +15 -1
  953. package/src/Cloudflare/Workers/CronEventSource.ts +3 -2
  954. package/src/Cloudflare/Workers/DurableObject.ts +227 -6
  955. package/src/Cloudflare/Workers/DurableObjectBridge.ts +38 -33
  956. package/src/Cloudflare/Workers/HttpServer.ts +1 -4
  957. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +132 -26
  958. package/src/Cloudflare/Workers/ObservabilityDestination.ts +4 -3
  959. package/src/Cloudflare/Workers/Vite.ts +93 -11
  960. package/src/Cloudflare/Workers/Worker.ts +46 -6
  961. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +33 -21
  962. package/src/Cloudflare/Workers/WorkerBinding.ts +20 -1
  963. package/src/Cloudflare/Workers/WorkerBridge.ts +239 -108
  964. package/src/Cloudflare/Workers/WorkerProvider.ts +689 -135
  965. package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +14 -45
  966. package/src/Cloudflare/Workers/cloudflare_workers.ts +20 -12
  967. package/src/Cloudflare/Workers/index.ts +1 -0
  968. package/src/Cloudflare/Workflows/Workflow.ts +54 -20
  969. package/src/Cloudflare/Workflows/WorkflowBridge.ts +19 -23
  970. package/src/Cloudflare/Workflows/WorkflowName.ts +41 -0
  971. package/src/Cloudflare/Zone/Hold.ts +7 -4
  972. package/src/Command/Dev.ts +42 -10
  973. package/src/Diff.ts +33 -0
  974. package/src/Docker/Container.ts +4 -1
  975. package/src/Drizzle/Postgres.ts +51 -23
  976. package/src/GitHub/AuthProvider.ts +0 -3
  977. package/src/GitHub/Env.ts +57 -0
  978. package/src/GitHub/Secrets.ts +1 -1
  979. package/src/GitHub/Variables.ts +1 -1
  980. package/src/GitHub/index.ts +1 -0
  981. package/src/Http.ts +11 -0
  982. package/src/Local/RpcProviderProxy.ts +1 -1
  983. package/src/Local/RpcSerialization.ts +6 -2
  984. package/src/Local/RpcSpawner.ts +21 -8
  985. package/src/Neon/AuthProvider.ts +1 -4
  986. package/src/Neon/Project.ts +2 -2
  987. package/src/Plan.ts +43 -13
  988. package/src/Planetscale/AuthProvider.ts +267 -27
  989. package/src/Planetscale/Branch.ts +4 -3
  990. package/src/Planetscale/Credentials.ts +18 -6
  991. package/src/Planetscale/Database.ts +2 -1
  992. package/src/Planetscale/MySQL/MySQLClusterSize.ts +120 -21
  993. package/src/Planetscale/MySQL/MySQLDatabase.ts +84 -44
  994. package/src/Planetscale/MySQL/MySQLMigrations.ts +4 -3
  995. package/src/Planetscale/OAuthClient.ts +307 -0
  996. package/src/Planetscale/Postgres/PostgresClusterSize.ts +4 -3
  997. package/src/Planetscale/Postgres/PostgresMigrations.ts +4 -3
  998. package/src/Planetscale/Util.ts +4 -3
  999. package/src/Platform.ts +83 -7
  1000. package/src/Provider.ts +35 -0
  1001. package/src/Runtime.ts +92 -0
  1002. package/src/RuntimeContext.ts +79 -0
  1003. package/src/Server/Process.ts +11 -18
  1004. package/src/Stack.ts +1 -1
  1005. package/src/State/HttpStateStore.ts +5 -5
  1006. package/src/Sync.ts +3 -0
  1007. package/src/Test/Alchemy.ts +282 -0
  1008. package/src/Test/Http.ts +8 -6
  1009. package/src/Util/cached-function.ts +5 -5
  1010. package/src/Util/data.ts +14 -5
  1011. package/src/Util/poll.ts +1 -1
  1012. package/src/Util/proxy-chain.ts +3 -0
  1013. package/lib/ExecutionContext.d.ts +0 -18
  1014. package/lib/ExecutionContext.d.ts.map +0 -1
  1015. package/lib/ExecutionContext.js +0 -10
  1016. package/lib/ExecutionContext.js.map +0 -1
  1017. package/src/ExecutionContext.ts +0 -18
@@ -1,3 +1,4 @@
1
+ import * as durableObjectsApi from "@distilled.cloud/cloudflare/durable-objects";
1
2
  import * as workers from "@distilled.cloud/cloudflare/workers";
2
3
  import * as wfp from "@distilled.cloud/cloudflare/workers-for-platforms";
3
4
  import * as zones from "@distilled.cloud/cloudflare/zones";
@@ -25,13 +26,53 @@ import { readAssets, uploadAssets } from "./Assets.js";
25
26
  import { getCompatibility } from "./Compatibility.js";
26
27
  import { isDurableObjectExport } from "./DurableObject.js";
27
28
  import { LocalWorkerProvider } from "./LocalWorkerProvider.js";
28
- import { Worker } from "./Worker.js";
29
+ import { Worker, } from "./Worker.js";
29
30
  import { getCacheBinding, getCronBindings } from "./WorkerAsyncBindings.js";
30
31
  import { readPrebuiltWorkerBundle, WorkerBundle } from "./WorkerBundle.js";
31
32
  import { isWorkerLoader } from "./WorkerLoader.js";
32
33
  import { createWorkerName } from "./WorkerName.js";
33
34
  class MissingDurableObjects extends Data.TaggedError("MissingDurableObjects") {
34
35
  }
36
+ /**
37
+ * A Durable Object class is being dropped from this Worker while a binding in
38
+ * the same deploy still references it on another script — the class moved
39
+ * cross-script, but its namespace (and every stored object in it) still lives
40
+ * on this Worker. Cloudflare rejects a single upload that both deletes the
41
+ * class and ships a binding referencing it, and silently deleting would
42
+ * destroy the namespace's data irreversibly, so the deploy fails before any
43
+ * upload.
44
+ *
45
+ * Moving a Durable Object class between Workers is always declared: set
46
+ * `transferredFrom` on the Durable Object at its **new host** — naming the
47
+ * former host by Worker logical id (same stack) or physical script name — and
48
+ * Alchemy performs the data-preserving `transferred_classes` migration on the
49
+ * new host's deploy; this deploy then converges on its own. To abandon the
50
+ * data instead, remove the binding entirely in one deploy (which deletes the
51
+ * class and its data), then add the cross-script binding in a second deploy.
52
+ */
53
+ export class DurableObjectTransferRequired extends Data.TaggedError("DurableObjectTransferRequired") {
54
+ get message() {
55
+ return (`Durable Object class '${this.className}' still lives on Worker '${this.scriptName}' but this deploy re-binds it as a cross-script reference` +
56
+ (this.targetScriptName ? ` to '${this.targetScriptName}'` : "") +
57
+ ". Durable Object data does NOT move with the class automatically. " +
58
+ `To move the data, set transferredFrom: "${this.scriptName}" (the former host's script name, or its Worker logical id for same-stack moves) on the Durable Object declaration in its new host Worker. ` +
59
+ "To abandon the data, remove the binding entirely in one deploy before re-adding it as a cross-script reference.");
60
+ }
61
+ }
62
+ /**
63
+ * More than one script matches the `transferredFrom` declaration of a Durable
64
+ * Object (e.g. an orphaned script left behind by a `name` prop change still
65
+ * carries the same alchemy tags, or the host history lists several scripts
66
+ * that each still hold a same-class namespace). Alchemy refuses to guess
67
+ * which namespace's data to move — narrow the declaration to the exact
68
+ * physical script name that holds the data.
69
+ */
70
+ export class AmbiguousDurableObjectTransfer extends Data.TaggedError("AmbiguousDurableObjectTransfer") {
71
+ get message() {
72
+ return (`Durable Object '${this.logicalId}' (class '${this.className}') is new to Worker '${this.scriptName}' and multiple scripts match its transferredFrom declaration: ${this.sources.join(", ")}. ` +
73
+ `Narrow transferredFrom to the exact physical script name that holds the data.`);
74
+ }
75
+ }
35
76
  /**
36
77
  * Resolve the Workers for Platforms dispatch-namespace *name* from a resolved
37
78
  * `namespace` prop or persisted attribute. The engine resolves a passed
@@ -106,7 +147,7 @@ const isBindingTargetNotFound = (e) => e._tag === "SecretsStoreBindingNotFound"
106
147
  e._tag === "VectorizeIndexNotFound" ||
107
148
  e._tag === "DispatchNamespaceNotFound" ||
108
149
  e._tag === "MtlsCertificateNotFound";
109
- const bindingTargetNotFoundRetrySchedule = () => Schedule.fixed("2 seconds").pipe(Schedule.both(Schedule.recurs(10)));
150
+ const bindingTargetNotFoundRetrySchedule = () => Schedule.max([Schedule.fixed("2 seconds"), Schedule.recurs(10)]);
110
151
  /**
111
152
  * Upsert a Worker script, routing to the dispatch-namespace endpoint when
112
153
  * `dispatchNamespace` is set. The metadata/files contract is identical, and
@@ -351,7 +392,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
351
392
  })
352
393
  .pipe(Effect.retry({
353
394
  while: (error) => error._tag === "WorkerNotFound",
354
- schedule: Schedule.exponential(200).pipe(Schedule.both(Schedule.recurs(15))),
395
+ schedule: Schedule.max([
396
+ Schedule.exponential(200),
397
+ Schedule.recurs(15),
398
+ ]),
355
399
  }));
356
400
  return normalizeCrons(result.schedules.map((schedule) => schedule.cron));
357
401
  });
@@ -458,7 +502,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
458
502
  })
459
503
  .pipe(Effect.retry({
460
504
  while: (error) => error._tag === "WorkerNotFound",
461
- schedule: Schedule.exponential(200).pipe(Schedule.both(Schedule.recurs(15))),
505
+ schedule: Schedule.max([
506
+ Schedule.exponential(200),
507
+ Schedule.recurs(15),
508
+ ]),
462
509
  }));
463
510
  return {
464
511
  hostname,
@@ -587,7 +634,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
587
634
  // typed as `RouteScriptNotFound` via the createRoute patch.
588
635
  Effect.retry({
589
636
  while: (error) => error._tag === "RouteScriptNotFound",
590
- schedule: Schedule.exponential(200).pipe(Schedule.both(Schedule.recurs(15))),
637
+ schedule: Schedule.max([
638
+ Schedule.exponential(200),
639
+ Schedule.recurs(15),
640
+ ]),
591
641
  }), Effect.catchTag("InvalidRoute", (originalError) => Effect.gen(function* () {
592
642
  const match = yield* workers
593
643
  .listRoutes({ zoneId: route.zoneId })
@@ -617,6 +667,52 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
617
667
  const actualTags = new Set(tags ?? []);
618
668
  return createAlchemyWorkerTags(id).every((tag) => actualTags.has(tag));
619
669
  };
670
+ /**
671
+ * Resolve the source script of a declared Durable Object transfer for
672
+ * a class that is new to `selfScriptName`. `sources` is the
673
+ * `transferredFrom` host history: each entry names a former host either
674
+ * by *physical script name* or by *Worker logical id* in this stack +
675
+ * stage (matched via the `alchemy:id:`/stack/stage ownership tags).
676
+ * The namespace is transferred from whichever listed host currently
677
+ * holds a same-class namespace; when none does (fresh stage, or every
678
+ * transfer already completed) this returns `undefined` and the caller
679
+ * creates the class fresh — the declaration is inert and safe to keep.
680
+ * More than one match (e.g. an orphaned script from a `name` change)
681
+ * fails with {@link AmbiguousDurableObjectTransfer} rather than
682
+ * guessing whose data to move.
683
+ */
684
+ const resolveTransferSource = Effect.fn(function* (params) {
685
+ if (params.sources.length === 0) {
686
+ return undefined;
687
+ }
688
+ const candidates = Array.from(new Set(params.observedNamespaces.flatMap((ns) => ns.class === params.className &&
689
+ ns.script !== params.selfScriptName
690
+ ? [ns.script]
691
+ : [])));
692
+ const matched = [];
693
+ for (const script of candidates) {
694
+ if (params.sources.includes(script)) {
695
+ matched.push(script);
696
+ continue;
697
+ }
698
+ const settings = yield* getScriptSettings(params.accountId, script, undefined).pipe(Effect.catchTag("WorkerNotFound", () => Effect.succeed(undefined)), Effect.catchTag("WorkerHasNoVersions", () => Effect.succeed(undefined)));
699
+ const tags = new Set(settings?.tags ?? []);
700
+ if (tags.has(`alchemy:stack:${stack.name}`) &&
701
+ tags.has(`alchemy:stage:${stack.stage}`) &&
702
+ params.sources.some((source) => tags.has(`alchemy:id:${source}`))) {
703
+ matched.push(script);
704
+ }
705
+ }
706
+ if (matched.length > 1) {
707
+ return yield* Effect.fail(new AmbiguousDurableObjectTransfer({
708
+ scriptName: params.selfScriptName,
709
+ logicalId: params.logicalId,
710
+ className: params.className,
711
+ sources: matched,
712
+ }));
713
+ }
714
+ return matched[0];
715
+ });
620
716
  const getDurableObjects = (bindings) => {
621
717
  const namespaces = Object.fromEntries((bindings ?? []).flatMap((binding) => binding.type === "durable_object_namespace" &&
622
718
  binding.className &&
@@ -659,7 +755,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
659
755
  error._tag === "WorkerNotFound" ||
660
756
  error._tag === "DispatchNamespaceScriptNotFound" ||
661
757
  error._tag === "DispatchNamespaceNotFound",
662
- schedule: Schedule.exponential(100).pipe(Schedule.both(Schedule.recurs(20))),
758
+ schedule: Schedule.max([
759
+ Schedule.exponential(100),
760
+ Schedule.recurs(20),
761
+ ]),
663
762
  }));
664
763
  });
665
764
  const prepareAssets = Effect.fn(function* (assets) {
@@ -700,7 +799,7 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
700
799
  // (~0.5s), which is only needed for vite-based workers at build time —
701
800
  // not for every Worker definition at module-load time.
702
801
  const Vite = yield* Effect.promise(() => import("./Vite.js"));
703
- const { clientDirectory, serverBundle } = yield* Vite.viteBuild(props.vite?.rootDir, Object.fromEntries((yield* Effect.all(Object.entries(props.env ?? {}).map(Effect.fn(function* ([key, value]) {
802
+ const { clientDirectory, serverBundle, externalWorkspaces } = yield* Vite.viteBuild(props.vite?.rootDir, Object.fromEntries((yield* Effect.all(Object.entries(props.env ?? {}).map(Effect.fn(function* ([key, value]) {
704
803
  return [
705
804
  key,
706
805
  typeof value === "string"
@@ -719,11 +818,12 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
719
818
  : undefined,
720
819
  ];
721
820
  })))).filter(([_, value]) => value !== undefined)), {
821
+ main: props.vite?.main,
722
822
  compatibilityDate: compatibility.date,
723
823
  compatibilityFlags: compatibility.flags,
724
824
  viteEnvironments: props.vite?.viteEnvironments,
725
825
  });
726
- const [assets, bundle] = yield* Effect.all([
826
+ const [assets, bundle, input] = yield* Effect.all([
727
827
  clientDirectory
728
828
  ? readAssets({
729
829
  ...(props.assets && typeof props.assets !== "string"
@@ -733,11 +833,34 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
733
833
  })
734
834
  : Effect.undefined,
735
835
  serverBundle,
836
+ hashViteInput(props.vite?.rootDir, props.vite?.memo, externalWorkspaces),
736
837
  ], { concurrency: "unbounded" });
737
838
  if (!assets && !bundle) {
738
839
  return yield* Effect.die(new Error("Vite build produced neither assets nor server output"));
739
840
  }
740
- return { assets, bundle };
841
+ return {
842
+ assets,
843
+ bundle,
844
+ input: input.hash,
845
+ additionalWorkspaces: input.workspaces,
846
+ };
847
+ });
848
+ const hashViteInput = Effect.fn(function* (rootDir = process.cwd(), options, additionalWorkspaces) {
849
+ const hashWorkspaceDirectory = (cwd, memo) => hashDirectory({ cwd: path.resolve(rootDir, cwd), memo }).pipe(Effect.map((hash) => `${path.relative(rootDir, cwd)}:${hash}`));
850
+ const hashRoot = hashWorkspaceDirectory(rootDir, options);
851
+ if (Array.isArray(options?.workspaces)) {
852
+ return yield* Effect.all([
853
+ hashRoot,
854
+ ...options.workspaces.map(({ cwd, ...options }) => hashWorkspaceDirectory(cwd, options)),
855
+ ], { concurrency: "unbounded" }).pipe(Effect.flatMap(([root, ...workspaces]) => sha256Object([root, ...workspaces.sort()])), Effect.map((hash) => ({ hash, workspaces: undefined })));
856
+ }
857
+ const [root, workspaces] = yield* Effect.all([hashRoot, additionalWorkspaces], { concurrency: "unbounded" });
858
+ const workspaceHashes = yield* Effect.forEach(workspaces, (cwd) => hashWorkspaceDirectory(cwd), { concurrency: "unbounded" });
859
+ const hash = yield* sha256Object([root, ...workspaceHashes.sort()]);
860
+ return {
861
+ hash,
862
+ workspaces: Array.from(workspaces).map((cwd) => path.relative(rootDir, cwd)),
863
+ };
741
864
  });
742
865
  const prepareAssetsAndBundle = (id, props, opts = {}) => Effect.gen(function* () {
743
866
  if (props.script !== undefined) {
@@ -753,24 +876,12 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
753
876
  files: [{ path: "main.js", content: props.script }],
754
877
  hash: bundleHash,
755
878
  },
879
+ input: undefined,
880
+ additionalWorkspaces: undefined,
756
881
  };
757
882
  }
758
883
  if (props.vite) {
759
- const [{ assets, bundle }, input] = yield* Effect.all([
760
- viteBuild(props),
761
- // hashDirectory expects `{ cwd, memo }`. The vite props
762
- // store the project root under `rootDir`, so map it
763
- // here. Without this, `cwd` falls back to
764
- // `process.cwd()` and the input hash is computed over
765
- // the wrong directory tree (often the entire monorepo
766
- // root), making it both slow and unable to detect
767
- // changes scoped to the actual Vite project.
768
- hashDirectory({
769
- cwd: props.vite.rootDir,
770
- memo: props.vite.memo,
771
- }),
772
- ], { concurrency: "unbounded" });
773
- return { assets, bundle, input };
884
+ return yield* viteBuild(props);
774
885
  }
775
886
  const [assets, bundle] = yield* Effect.all([
776
887
  opts.skipAssetsRead
@@ -778,8 +889,13 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
778
889
  : prepareAssets(props.assets),
779
890
  prepareBundle(id, props),
780
891
  ], { concurrency: "unbounded" });
781
- return { assets, bundle };
782
- }).pipe(Effect.map(({ assets, bundle, input }) => ({
892
+ return {
893
+ assets,
894
+ bundle,
895
+ input: undefined,
896
+ additionalWorkspaces: undefined,
897
+ };
898
+ }).pipe(Effect.map(({ assets, bundle, input, additionalWorkspaces }) => ({
783
899
  assets,
784
900
  bundle: {
785
901
  main: bundle?.files[0].path,
@@ -791,6 +907,7 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
791
907
  assets: assets?.hash,
792
908
  bundle: bundle?.hash,
793
909
  input,
910
+ additionalWorkspaces,
794
911
  },
795
912
  })));
796
913
  const normalizePrebuiltAssets = (assets, output) => {
@@ -834,7 +951,18 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
834
951
  assets: prebuiltAssets?.hash ?? preparedHash.assets,
835
952
  metadata: metadataHash,
836
953
  };
837
- const metadataBindings = bindings.flatMap((b) => b.data.bindings ?? []);
954
+ // `transferredFrom` is alchemy-only transfer metadata on
955
+ // durable_object_namespace bindings — it drives the
956
+ // `transferred_classes` migration below and must be stripped from the
957
+ // wire-shape binding before upload.
958
+ const metadataBindings = bindings.flatMap((b) => (b.data.bindings ?? []).map((item) => {
959
+ if (item.type === "durable_object_namespace" &&
960
+ item.transferredFrom !== undefined) {
961
+ const { transferredFrom: _, ...rest } = item;
962
+ return rest;
963
+ }
964
+ return item;
965
+ }));
838
966
  const expectedDurableObjectClassNames = getExpectedDurableObjectClassNames(metadataBindings, name);
839
967
  let metadataAssets;
840
968
  let keepAssets = false;
@@ -943,7 +1071,8 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
943
1071
  .pipe(Effect.map((s) => s), Effect.catch(() => Effect.succeed(undefined))));
944
1072
  const oldTags = Array.from(new Set(oldSettings?.tags ?? []));
945
1073
  const oldBindings = oldSettings?.bindings ?? [];
946
- // Parse alchemy:do:{logicalId}:{className} tags
1074
+ // Parse the DO logical-id→class mapping from script tags (packed
1075
+ // `alchemy:dos:` and legacy per-DO `alchemy:do:` formats)
947
1076
  const oldDoClassNameByLogicalId = getDurableObjectTagMap(oldTags);
948
1077
  const currentDoBindings = getDurableObjectBindings(bindings, name);
949
1078
  const currentDoClassNameByLogicalId = Object.fromEntries(currentDoBindings.map((binding) => [
@@ -955,11 +1084,13 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
955
1084
  ? [tag.slice("alchemy:migration-tag:".length)]
956
1085
  : [])[0];
957
1086
  const newMigrationTag = bumpMigrationTagVersion(oldMigrationTag);
958
- // Compute deleted classes
959
- const deletedClasses = [];
1087
+ // Compute delete-class candidates. Candidates are validated against
1088
+ // observed namespace ownership below — a class may already have been
1089
+ // transferred to another script by its new host's deploy.
1090
+ const deletedClassCandidates = [];
960
1091
  for (const [logicalId, className] of Object.entries(oldDoClassNameByLogicalId)) {
961
1092
  if (!currentDoClassNameByLogicalId[logicalId]) {
962
- deletedClasses.push(className);
1093
+ deletedClassCandidates.push(className);
963
1094
  }
964
1095
  }
965
1096
  // Backward compatibility for old workers that have DO bindings but no
@@ -975,36 +1106,150 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
975
1106
  oldBinding.className &&
976
1107
  ownedLocally &&
977
1108
  !currentDoBindings.some((binding) => binding.bindingName === oldBinding.name)) {
978
- deletedClasses.push(oldBinding.className);
1109
+ deletedClassCandidates.push(oldBinding.className);
979
1110
  }
980
1111
  }
981
1112
  }
1113
+ // Class names the current deploy references *cross-script* (mapped to
1114
+ // the foreign script). A class that both leaves the "hosted here" set
1115
+ // and shows up here has moved to another Worker — Cloudflare rejects
1116
+ // deleting a class while any binding in the upload references its
1117
+ // class name, and deleting would destroy the namespace's data.
1118
+ const crossScriptClassTargets = new Map();
1119
+ for (const item of metadataBindings) {
1120
+ if (item.type === "durable_object_namespace" &&
1121
+ item.className &&
1122
+ typeof item.scriptName === "string" &&
1123
+ item.scriptName !== name) {
1124
+ crossScriptClassTargets.set(item.className, item.scriptName);
1125
+ }
1126
+ }
1127
+ // One account-level namespace listing serves both sides of a
1128
+ // transfer: the destination checks the source still hosts the class
1129
+ // before emitting `transferred_classes`, and the former host checks
1130
+ // whether a to-be-deleted class was already transferred away.
1131
+ // Dispatch-namespace user workers keep the legacy behavior — their
1132
+ // namespaces don't surface on the account-level list.
1133
+ const mayTransferIn = currentDoBindings.some((binding) => !oldDoClassNameByLogicalId[binding.logicalId] &&
1134
+ binding.transferredFrom !== undefined);
1135
+ const observedNamespaces = !dispatchNamespace &&
1136
+ (deletedClassCandidates.length > 0 || mayTransferIn)
1137
+ ? yield* listDurableObjectNamespaces(accountId)
1138
+ : [];
1139
+ const hosts = (namespaces, scriptName, className) => namespaces.some((ns) => ns.script === scriptName && ns.class === className);
1140
+ const scriptHostsClass = (scriptName, className) => hosts(observedNamespaces, scriptName, className);
1141
+ const deletedClasses = [];
1142
+ for (const className of deletedClassCandidates) {
1143
+ if (dispatchNamespace) {
1144
+ deletedClasses.push(className);
1145
+ continue;
1146
+ }
1147
+ const targetScriptName = crossScriptClassTargets.get(className);
1148
+ if (targetScriptName === undefined) {
1149
+ // Plain removal. Delete only if the namespace actually still
1150
+ // lives here — it may have been transferred to another script by
1151
+ // that script's deploy, or removed out-of-band. The stale
1152
+ // alchemy:do tag drops out either way because tags are recomputed
1153
+ // from current bindings.
1154
+ if (scriptHostsClass(name, className)) {
1155
+ deletedClasses.push(className);
1156
+ }
1157
+ continue;
1158
+ }
1159
+ // The class went local → cross-script. When the new host's deploy
1160
+ // ran a `transferred_classes` migration moments ago, the account
1161
+ // listing can briefly still attribute the namespace to this script,
1162
+ // so re-observe with a short bounded budget until the transfer
1163
+ // becomes visible (namespace off this script) or the state is
1164
+ // conclusively a conflict (still here — including the case where
1165
+ // the target created a *fresh* namespace for the same class name).
1166
+ const namespaces = yield* listDurableObjectNamespaces(accountId).pipe(Effect.repeat({
1167
+ schedule: Schedule.spaced("2 seconds"),
1168
+ until: (observed) => !hosts(observed, name, className) ||
1169
+ hosts(observed, targetScriptName, className),
1170
+ times: 5,
1171
+ }));
1172
+ if (!hosts(namespaces, name, className)) {
1173
+ // Transferred away — nothing to delete.
1174
+ continue;
1175
+ }
1176
+ // local → cross-script transition without a transfer. Fail before
1177
+ // any upload: Cloudflare would reject the combined delete + binding
1178
+ // anyway, and silently deleting would destroy the namespace's
1179
+ // data. See the error's docs for the two ways out
1180
+ // (`transferredFrom` on the new host, or a two-phase removal).
1181
+ return yield* Effect.fail(new DurableObjectTransferRequired({
1182
+ scriptName: name,
1183
+ className,
1184
+ targetScriptName,
1185
+ }));
1186
+ }
982
1187
  // Collect container-backed class names so we can send container metadata
983
1188
  const containerClassNames = new Set(bindings.flatMap((b) => (b.data.containers ?? []).map((c) => c.className)));
984
- // Compute new and renamed classes
1189
+ // Compute new, renamed, and transferred classes
985
1190
  const newClasses = [];
986
1191
  const newSqliteClasses = [];
987
1192
  const renamedClasses = [];
1193
+ const transferredClasses = [];
988
1194
  for (const binding of currentDoBindings) {
989
1195
  let previousClassName = oldDoClassNameByLogicalId[binding.logicalId];
990
1196
  if (!previousClassName) {
991
- // No `alchemy:do:` tag maps this logical id to a class — the
1197
+ // No DO metadata tag maps this logical id to a class — the
992
1198
  // worker was created outside Alchemy (raw API / Wrangler) or
993
1199
  // before these tags existed. Fall back to matching the observed
994
1200
  // cloud binding by binding name so adoption reuses the existing
995
1201
  // class instead of asking Cloudflare to create one that already
996
1202
  // exists (which fails the migration). This is the "first deploy
997
1203
  // must match the existing class name" path; once we write the
998
- // `alchemy:do:` tag, subsequent renames are driven by logical id.
1204
+ // `alchemy:dos:` tag, subsequent renames are driven by logical id.
999
1205
  const observed = oldBindings.find((old) => old.type === "durable_object_namespace" &&
1000
1206
  "className" in old &&
1001
1207
  old.className &&
1208
+ // Only a *locally-owned* binding proves the class exists on
1209
+ // this script. A cross-script binding under the same name —
1210
+ // e.g. this worker previously referenced another host's
1211
+ // class and now hosts its own — points at a foreign
1212
+ // namespace and must not suppress the create migration
1213
+ // (Cloudflare rejects a local binding for a class the
1214
+ // script isn't configured to implement).
1215
+ (!("scriptName" in old) ||
1216
+ old.scriptName === undefined ||
1217
+ old.scriptName === name) &&
1002
1218
  old.name === binding.bindingName);
1003
1219
  if (observed && "className" in observed && observed.className) {
1004
1220
  previousClassName = observed.className;
1005
1221
  }
1006
1222
  }
1007
1223
  if (!previousClassName) {
1224
+ // A class new to this script is a host move when the declaration
1225
+ // says so: `transferredFrom` lists the former host(s) — moves
1226
+ // are always declared, never inferred, because a class deleted
1227
+ // on one worker and created on another is otherwise ambiguous
1228
+ // between "move the data" and "delete + fresh namespace". The
1229
+ // declared source must be observed to still host the namespace;
1230
+ // otherwise (fresh stage, transfer already completed) fall
1231
+ // through to a plain create.
1232
+ const fromScript = dispatchNamespace
1233
+ ? undefined
1234
+ : yield* resolveTransferSource({
1235
+ accountId,
1236
+ selfScriptName: name,
1237
+ logicalId: binding.logicalId,
1238
+ className: binding.className,
1239
+ sources: normalizeTransferSources(binding.transferredFrom, name),
1240
+ observedNamespaces,
1241
+ });
1242
+ if (fromScript !== undefined) {
1243
+ // Data-preserving move: ship Cloudflare's
1244
+ // `transferred_classes` migration instead of creating a
1245
+ // fresh class.
1246
+ transferredClasses.push({
1247
+ from: binding.className,
1248
+ fromScript,
1249
+ to: binding.className,
1250
+ });
1251
+ continue;
1252
+ }
1008
1253
  // Default all new Durable Object classes to SQLite. Cloudflare
1009
1254
  // recommends SQLite for new namespaces, and container-backed
1010
1255
  // Durable Objects require it.
@@ -1022,28 +1267,29 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1022
1267
  currentDoClassNameByLogicalId,
1023
1268
  deletedClasses,
1024
1269
  renamedClasses,
1270
+ transferredClasses,
1025
1271
  newSqliteClasses,
1026
1272
  })}`);
1027
- // Build alchemy:do:{logicalId}:{className} tags for each DO binding
1028
- const alchemyDoTags = [];
1029
- for (const binding of currentDoBindings) {
1030
- alchemyDoTags.push(`alchemy:do:${binding.logicalId}:${binding.className}`);
1031
- }
1032
- const metadataTags = Array.from(new Set([
1273
+ // Pack every DO logical-id→class mapping into as few `alchemy:dos:`
1274
+ // tags as possible — one tag per DO blows Cloudflare's 10-tag limit
1275
+ // at 7+ bindings (#811).
1276
+ const alchemyDoTags = encodeDurableObjectTags(currentDoBindings);
1277
+ const alchemyTags = [
1033
1278
  ...createAlchemyWorkerTags(id),
1034
1279
  ...alchemyDoTags,
1035
1280
  ...(newMigrationTag
1036
1281
  ? [`alchemy:migration-tag:${newMigrationTag}`]
1037
1282
  : []),
1038
- ...(news.tags ?? []),
1039
- ]));
1283
+ ];
1284
+ const metadataTags = Array.from(new Set([...alchemyTags, ...(news.tags ?? [])]));
1285
+ yield* validateWorkerTags(name, metadataTags, alchemyTags.length);
1040
1286
  const migrations = {
1041
1287
  oldTag: oldMigrationTag,
1042
1288
  newTag: newMigrationTag,
1043
1289
  newClasses,
1044
1290
  deletedClasses,
1045
1291
  renamedClasses,
1046
- transferredClasses: [],
1292
+ transferredClasses,
1047
1293
  newSqliteClasses,
1048
1294
  };
1049
1295
  const metadataContainers = [...containerClassNames].map((className) => ({
@@ -1164,7 +1410,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1164
1410
  while: (error) => error._tag === "WorkerNotFound" ||
1165
1411
  error._tag === "InternalServerError" ||
1166
1412
  error._tag === "UnknownCloudflareError",
1167
- schedule: Schedule.exponential(200).pipe(Schedule.both(Schedule.recurs(15))),
1413
+ schedule: Schedule.max([
1414
+ Schedule.exponential(200),
1415
+ Schedule.recurs(15),
1416
+ ]),
1168
1417
  }));
1169
1418
  }
1170
1419
  const desiredDomains = normalizeDomains(news.domain);
@@ -1237,11 +1486,8 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1237
1486
  return assetsHash !== output.hash?.assets;
1238
1487
  }
1239
1488
  if (props.vite) {
1240
- const input = yield* hashDirectory({
1241
- cwd: props.vite.rootDir,
1242
- memo: props.vite.memo,
1243
- });
1244
- return input !== output.hash?.input;
1489
+ const { hash } = yield* hashViteInput(props.vite.rootDir, props.vite.memo, Effect.succeed(output.hash?.additionalWorkspaces ?? []));
1490
+ return hash !== output.hash?.input;
1245
1491
  }
1246
1492
  const bundleHash = yield* prepareBundle(id, props).pipe(Effect.map((b) => b.hash));
1247
1493
  if (bundleHash !== output.hash?.bundle) {
@@ -1473,19 +1719,27 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1473
1719
  const exportDerived = Object.keys(exportMap)
1474
1720
  .filter((logicalId) => isDurableObjectExport(exportMap[logicalId]))
1475
1721
  .map((logicalId) => ({ logicalId, className: logicalId }));
1476
- const durableObjects = mergeDurableObjectClasses(exportDerived, getDurableObjectBindings(bindings, name));
1722
+ // Transfer-destination classes are excluded from the placeholder
1723
+ // entirely (class list, bindings, tags): Cloudflare forbids
1724
+ // creating the destination class of a `transferred_classes`
1725
+ // migration ahead of the transfer, so `reconcile` must perform it
1726
+ // with the real upload. (`transferredFrom` may still be an
1727
+ // unresolved Output here — precreate runs on raw props — but only
1728
+ // its presence matters.)
1729
+ const durableObjects = mergeDurableObjectClasses(exportDerived, getDurableObjectBindings(bindings, name)).filter((binding) => !binding.transferredFrom);
1477
1730
  const doClasses = durableObjects.map((binding) => binding.className);
1478
1731
  // Only attach container metadata for classes actually fronted by a
1479
1732
  // Container binding (mirrors reconcile's `containerClassNames`).
1480
1733
  // Mapping every DO class to a container would wrongly mark plain DOs
1481
1734
  // as container-backed in the placeholder.
1482
1735
  const containers = Array.from(new Set(bindings.flatMap((b) => (b.data.containers ?? []).map((c) => c.className)))).map((className) => ({ className }));
1483
- const alchemyDoTags = durableObjects.map(({ logicalId, className }) => `alchemy:do:${logicalId}:${className}`);
1484
- const tags = Array.from(new Set([
1736
+ const alchemyDoTags = encodeDurableObjectTags(durableObjects);
1737
+ const alchemyTags = [
1485
1738
  ...createAlchemyWorkerTags(id),
1486
1739
  ...alchemyDoTags,
1487
- ...(news.tags ?? []),
1488
- ]));
1740
+ ];
1741
+ const tags = Array.from(new Set([...alchemyTags, ...(news.tags ?? [])]));
1742
+ yield* validateWorkerTags(name, tags, alchemyTags.length);
1489
1743
  yield* Effect.logInfo(`Cloudflare Worker precreate: starting ${name}`);
1490
1744
  yield* Effect.logInfo(`Cloudflare Worker precreate: durable objects ${JSON.stringify(durableObjects)}`);
1491
1745
  const existingSettings = yield* getScriptSettings(accountId, name, dispatchNamespace).pipe(
@@ -1560,7 +1814,10 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1560
1814
  Effect.retry({
1561
1815
  while: (e) => e._tag === "InternalServerError" ||
1562
1816
  e._tag === "UnknownCloudflareError",
1563
- schedule: Schedule.exponential(1000).pipe(Schedule.both(Schedule.recurs(5))),
1817
+ schedule: Schedule.max([
1818
+ Schedule.exponential(1000),
1819
+ Schedule.recurs(5),
1820
+ ]),
1564
1821
  }));
1565
1822
  if (doClasses.length > 0) {
1566
1823
  ({ durableObjectNamespaces } =
@@ -1710,8 +1967,8 @@ export const LiveWorkerProvider = () => Provider.effect(Worker, Effect.gen(funct
1710
1967
  // The dispatch-namespace endpoints raise
1711
1968
  // `DispatchNamespaceScriptNotFound` / `DispatchNamespaceNotFound`.
1712
1969
  Effect.catchTag("WorkerNotFound", () => Effect.succeed(undefined)), Effect.catchTag("WorkerHasNoVersions", () => Effect.succeed(undefined)), Effect.catchTag("DispatchNamespaceScriptNotFound", () => Effect.succeed(undefined)), Effect.catchTag("DispatchNamespaceNotFound", () => Effect.succeed(undefined)));
1713
- yield* Effect.logInfo(`Cloudflare Worker reconcile: existing durable object tags ${JSON.stringify((existingSettings?.tags ?? []).filter((tag) => tag.startsWith("alchemy:do:")))}`);
1714
- yield* Effect.logInfo(`Cloudflare Worker reconcile: previous durable object tags ${JSON.stringify((output?.tags ?? []).filter((tag) => tag.startsWith("alchemy:do:")))}`);
1970
+ yield* Effect.logInfo(`Cloudflare Worker reconcile: existing durable object tags ${JSON.stringify((existingSettings?.tags ?? []).filter(isDurableObjectTag))}`);
1971
+ yield* Effect.logInfo(`Cloudflare Worker reconcile: previous durable object tags ${JSON.stringify((output?.tags ?? []).filter(isDurableObjectTag))}`);
1715
1972
  return yield* putWorker(id, news, bindings, olds, output, session, existingSettings);
1716
1973
  }),
1717
1974
  delete: Effect.fn(function* ({ output }) {
@@ -1800,6 +2057,26 @@ const contentTypeFromExtension = (extension) => {
1800
2057
  return "application/octet-stream";
1801
2058
  }
1802
2059
  };
2060
+ /**
2061
+ * Observe every Durable Object namespace on the account as `(script, class)`
2062
+ * pairs. Namespace ownership is authoritative cloud state: after a
2063
+ * `transferred_classes` migration the namespace moves to the receiving
2064
+ * script, so this is how both sides of a transfer observe where a class
2065
+ * currently lives — the destination checks the source still hosts the class
2066
+ * before emitting the transfer, and the former host checks whether a class
2067
+ * it is about to delete has already been transferred away.
2068
+ */
2069
+ const listDurableObjectNamespaces = (accountId) => durableObjectsApi.listNamespaces.items({ accountId }).pipe(Stream.runCollect, Effect.map((namespaces) => Array.from(namespaces).flatMap((ns) => ns.script && ns.class ? [{ script: ns.script, class: ns.class }] : [])));
2070
+ /**
2071
+ * Coerce a resolved `transferredFrom` declaration to its list form, dropping
2072
+ * self-references (a worker naming itself as its own former host is
2073
+ * meaningless — the class already lives there).
2074
+ */
2075
+ const normalizeTransferSources = (value, selfScriptName) => (value === undefined
2076
+ ? []
2077
+ : Array.isArray(value)
2078
+ ? value
2079
+ : [value]).filter((source) => source !== selfScriptName);
1803
2080
  function bumpMigrationTagVersion(oldTag) {
1804
2081
  if (!oldTag)
1805
2082
  return undefined;
@@ -1811,7 +2088,7 @@ function bumpMigrationTagVersion(oldTag) {
1811
2088
  /**
1812
2089
  * Merges a worker's export-derived and binding-derived Durable Object class
1813
2090
  * lists for the precreate placeholder, deduping by class name. The
1814
- * binding-derived entry wins on a collision so the `alchemy:do:` tag keys off
2091
+ * binding-derived entry wins on a collision so the `alchemy:dos:` tag keys off
1815
2092
  * the same logical id (the binding sid) that `reconcile` writes.
1816
2093
  */
1817
2094
  function mergeDurableObjectClasses(exportDerived, bindingDerived) {
@@ -1845,19 +2122,150 @@ function getDurableObjectBindings(bindings, workerName) {
1845
2122
  logicalId: binding.sid,
1846
2123
  bindingName: item.name,
1847
2124
  className: item.className,
2125
+ // Declared host history for a data-preserving
2126
+ // `transferred_classes` migration. Normalize an empty list to
2127
+ // "not declared"; self-references are dropped at resolution time.
2128
+ transferredFrom: Array.isArray(item.transferredFrom) &&
2129
+ item.transferredFrom.length === 0
2130
+ ? undefined
2131
+ : item.transferredFrom,
1848
2132
  },
1849
2133
  ];
1850
2134
  }));
1851
2135
  }
1852
- function getDurableObjectTagMap(tags) {
1853
- return Object.fromEntries(tags.flatMap((tag) => {
1854
- if (!tag.startsWith("alchemy:do:")) {
1855
- return [];
2136
+ /**
2137
+ * Cloudflare Worker script-tag limits, verified empirically against the live
2138
+ * API (2026-07):
2139
+ *
2140
+ * - at most **10 tags** per Worker (the 11th is rejected with `Forbidden`)
2141
+ * - each tag is at most **1024 bytes** (`BadRequest: Tag is too large`)
2142
+ * - tags may not contain `,` or `&`; everything else (`:`, `;`, `=`, `/`,
2143
+ * spaces, unicode) is accepted and round-trips intact
2144
+ *
2145
+ * Alchemy reserves 3 ownership tags (`alchemy:stack/stage/id`) and 1
2146
+ * migration tag, so the Durable Object logical-id→class mapping must not
2147
+ * spend one tag per DO (#811). Instead all mappings are packed into as few
2148
+ * `alchemy:dos:` tags as possible.
2149
+ */
2150
+ const MAX_TAGS_PER_WORKER = 10;
2151
+ const MAX_TAG_BYTES = 1024;
2152
+ const LEGACY_DO_TAG_PREFIX = "alchemy:do:";
2153
+ const PACKED_DO_TAG_PREFIX = "alchemy:dos:";
2154
+ class InvalidWorkerTags extends Data.TaggedError("InvalidWorkerTags") {
2155
+ }
2156
+ /**
2157
+ * Pack Durable Object logical-id→class mappings into `alchemy:dos:` tags.
2158
+ *
2159
+ * Each mapping is encoded as `logicalId=className` — elided to just
2160
+ * `className` when the two are equal (the common case for export-derived
2161
+ * classes) — with both components `encodeURIComponent`-escaped so the `;`
2162
+ * pair separator, the `=` delimiter, and Cloudflare's forbidden tag
2163
+ * characters (`,`, `&`) can never collide with user identifiers. Pairs are
2164
+ * sorted for deterministic output and greedily packed so each tag stays
2165
+ * within Cloudflare's 1024-byte tag limit; workers with more DOs than fit in
2166
+ * one tag spill into additional `alchemy:dos:` tags.
2167
+ *
2168
+ * `encodeURIComponent` output is pure ASCII, so `String.length` equals the
2169
+ * tag's byte length.
2170
+ *
2171
+ * @internal exported for unit testing.
2172
+ */
2173
+ export function encodeDurableObjectTags(durableObjects) {
2174
+ const pairs = [...durableObjects]
2175
+ .sort((a, b) => a.logicalId.localeCompare(b.logicalId))
2176
+ .map(({ logicalId, className }) => logicalId === className
2177
+ ? encodeURIComponent(className)
2178
+ : `${encodeURIComponent(logicalId)}=${encodeURIComponent(className)}`);
2179
+ const tags = [];
2180
+ let payload = "";
2181
+ for (const pair of pairs) {
2182
+ const appended = payload === "" ? pair : `${payload};${pair}`;
2183
+ if (PACKED_DO_TAG_PREFIX.length + appended.length > MAX_TAG_BYTES &&
2184
+ payload !== "") {
2185
+ tags.push(`${PACKED_DO_TAG_PREFIX}${payload}`);
2186
+ payload = pair;
1856
2187
  }
1857
- const parts = tag.split(":");
1858
- const logicalId = parts[2];
1859
- const className = parts.slice(3).join(":");
1860
- return logicalId && className ? [[logicalId, className]] : [];
1861
- }));
2188
+ else {
2189
+ payload = appended;
2190
+ }
2191
+ }
2192
+ if (payload !== "") {
2193
+ tags.push(`${PACKED_DO_TAG_PREFIX}${payload}`);
2194
+ }
2195
+ return tags;
1862
2196
  }
2197
+ /**
2198
+ * Parse the Durable Object logical-id→class mapping from a worker's script
2199
+ * tags. Reads both formats so workers deployed before the packed format roll
2200
+ * forward transparently:
2201
+ *
2202
+ * - legacy: one `alchemy:do:{logicalId}:{className}` tag per DO
2203
+ * - packed: `alchemy:dos:{pair};{pair};…` (see {@link encodeDurableObjectTags})
2204
+ *
2205
+ * A packed entry wins over a legacy entry for the same logical id.
2206
+ *
2207
+ * @internal exported for unit testing.
2208
+ */
2209
+ export function getDurableObjectTagMap(tags) {
2210
+ const map = {};
2211
+ for (const tag of tags) {
2212
+ if (tag.startsWith(LEGACY_DO_TAG_PREFIX)) {
2213
+ const parts = tag.split(":");
2214
+ const logicalId = parts[2];
2215
+ const className = parts.slice(3).join(":");
2216
+ if (logicalId && className && !(logicalId in map)) {
2217
+ map[logicalId] = className;
2218
+ }
2219
+ }
2220
+ }
2221
+ for (const tag of tags) {
2222
+ if (tag.startsWith(PACKED_DO_TAG_PREFIX)) {
2223
+ for (const pair of tag.slice(PACKED_DO_TAG_PREFIX.length).split(";")) {
2224
+ if (pair === "")
2225
+ continue;
2226
+ const eq = pair.indexOf("=");
2227
+ const logicalId = decodeURIComponent(eq === -1 ? pair : pair.slice(0, eq));
2228
+ const className = decodeURIComponent(eq === -1 ? pair : pair.slice(eq + 1));
2229
+ if (logicalId && className) {
2230
+ map[logicalId] = className;
2231
+ }
2232
+ }
2233
+ }
2234
+ }
2235
+ return map;
2236
+ }
2237
+ const isDurableObjectTag = (tag) => tag.startsWith(LEGACY_DO_TAG_PREFIX) || tag.startsWith(PACKED_DO_TAG_PREFIX);
2238
+ /**
2239
+ * Fail fast — before the script upload — when a worker's tag set violates
2240
+ * Cloudflare's limits, instead of surfacing the raw `Forbidden`/`BadRequest`
2241
+ * at PUT time (#811). `alchemyTagCount` is the number of tags alchemy itself
2242
+ * generated (ownership + migration + packed DO tags) so the message can tell
2243
+ * the user how much of the budget is theirs.
2244
+ */
2245
+ const validateWorkerTags = (scriptName, tags, alchemyTagCount) => Effect.gen(function* () {
2246
+ if (tags.length > MAX_TAGS_PER_WORKER) {
2247
+ return yield* Effect.fail(new InvalidWorkerTags({
2248
+ scriptName,
2249
+ reason: `worker "${scriptName}" needs ${tags.length} script tags but Cloudflare allows at most ${MAX_TAGS_PER_WORKER}. ` +
2250
+ `Alchemy reserves ${alchemyTagCount} (ownership, migration and durable-object metadata); ` +
2251
+ `${tags.length - alchemyTagCount} user tags were passed via \`tags\`. Remove ${tags.length - MAX_TAGS_PER_WORKER} tag(s).`,
2252
+ }));
2253
+ }
2254
+ const encoder = new TextEncoder();
2255
+ for (const tag of tags) {
2256
+ if (tag.includes(",") || tag.includes("&")) {
2257
+ return yield* Effect.fail(new InvalidWorkerTags({
2258
+ scriptName,
2259
+ reason: `worker "${scriptName}" tag ${JSON.stringify(tag)} contains ',' or '&', which Cloudflare rejects.`,
2260
+ }));
2261
+ }
2262
+ const bytes = yield* Effect.sync(() => encoder.encode(tag).length);
2263
+ if (bytes > MAX_TAG_BYTES) {
2264
+ return yield* Effect.fail(new InvalidWorkerTags({
2265
+ scriptName,
2266
+ reason: `worker "${scriptName}" tag ${JSON.stringify(tag.slice(0, 64))}… is ${bytes} bytes; Cloudflare allows at most ${MAX_TAG_BYTES}.`,
2267
+ }));
2268
+ }
2269
+ }
2270
+ });
1863
2271
  //# sourceMappingURL=WorkerProvider.js.map