alchemy 2.0.0-beta.41 → 2.0.0-beta.43

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 (514) hide show
  1. package/bin/exec.js +2 -9
  2. package/bin/exec.js.map +1 -1
  3. package/lib/AWS/CloudWatch/DescribeAlarmContributors.d.ts +1 -1
  4. package/lib/AWS/CloudWatch/DescribeAlarmContributors.d.ts.map +1 -1
  5. package/lib/AWS/CloudWatch/DescribeAlarmHistory.d.ts +1 -1
  6. package/lib/AWS/CloudWatch/DescribeAlarmHistory.d.ts.map +1 -1
  7. package/lib/AWS/CloudWatch/DescribeAlarms.d.ts +1 -1
  8. package/lib/AWS/CloudWatch/DescribeAlarms.d.ts.map +1 -1
  9. package/lib/AWS/CloudWatch/DescribeAlarmsForMetric.d.ts +1 -1
  10. package/lib/AWS/CloudWatch/DescribeAlarmsForMetric.d.ts.map +1 -1
  11. package/lib/AWS/CloudWatch/DescribeAnomalyDetectors.d.ts +1 -1
  12. package/lib/AWS/CloudWatch/DescribeAnomalyDetectors.d.ts.map +1 -1
  13. package/lib/AWS/CloudWatch/DescribeInsightRules.d.ts +1 -1
  14. package/lib/AWS/CloudWatch/DescribeInsightRules.d.ts.map +1 -1
  15. package/lib/AWS/CloudWatch/DisableAlarmActions.d.ts +1 -1
  16. package/lib/AWS/CloudWatch/DisableAlarmActions.d.ts.map +1 -1
  17. package/lib/AWS/CloudWatch/DisableInsightRules.d.ts +1 -1
  18. package/lib/AWS/CloudWatch/DisableInsightRules.d.ts.map +1 -1
  19. package/lib/AWS/CloudWatch/EnableAlarmActions.d.ts +1 -1
  20. package/lib/AWS/CloudWatch/EnableAlarmActions.d.ts.map +1 -1
  21. package/lib/AWS/CloudWatch/GetAlarmMuteRule.d.ts +1 -1
  22. package/lib/AWS/CloudWatch/GetAlarmMuteRule.d.ts.map +1 -1
  23. package/lib/AWS/CloudWatch/GetDashboard.d.ts +1 -1
  24. package/lib/AWS/CloudWatch/GetDashboard.d.ts.map +1 -1
  25. package/lib/AWS/CloudWatch/GetInsightRuleReport.d.ts +1 -1
  26. package/lib/AWS/CloudWatch/GetInsightRuleReport.d.ts.map +1 -1
  27. package/lib/AWS/CloudWatch/GetMetricData.d.ts +1 -1
  28. package/lib/AWS/CloudWatch/GetMetricData.d.ts.map +1 -1
  29. package/lib/AWS/CloudWatch/GetMetricStatistics.d.ts +1 -1
  30. package/lib/AWS/CloudWatch/GetMetricStatistics.d.ts.map +1 -1
  31. package/lib/AWS/CloudWatch/GetMetricStream.d.ts +1 -1
  32. package/lib/AWS/CloudWatch/GetMetricStream.d.ts.map +1 -1
  33. package/lib/AWS/CloudWatch/GetMetricWidgetImage.d.ts +1 -1
  34. package/lib/AWS/CloudWatch/GetMetricWidgetImage.d.ts.map +1 -1
  35. package/lib/AWS/CloudWatch/ListAlarmMuteRules.d.ts +1 -1
  36. package/lib/AWS/CloudWatch/ListAlarmMuteRules.d.ts.map +1 -1
  37. package/lib/AWS/CloudWatch/ListDashboards.d.ts +1 -1
  38. package/lib/AWS/CloudWatch/ListDashboards.d.ts.map +1 -1
  39. package/lib/AWS/CloudWatch/ListManagedInsightRules.d.ts +1 -1
  40. package/lib/AWS/CloudWatch/ListManagedInsightRules.d.ts.map +1 -1
  41. package/lib/AWS/CloudWatch/ListMetricStreams.d.ts +1 -1
  42. package/lib/AWS/CloudWatch/ListMetricStreams.d.ts.map +1 -1
  43. package/lib/AWS/CloudWatch/ListMetrics.d.ts +1 -1
  44. package/lib/AWS/CloudWatch/ListMetrics.d.ts.map +1 -1
  45. package/lib/AWS/CloudWatch/ListTagsForResource.d.ts +1 -1
  46. package/lib/AWS/CloudWatch/ListTagsForResource.d.ts.map +1 -1
  47. package/lib/AWS/CloudWatch/PutMetricData.d.ts +1 -1
  48. package/lib/AWS/CloudWatch/PutMetricData.d.ts.map +1 -1
  49. package/lib/AWS/CloudWatch/SetAlarmState.d.ts +1 -1
  50. package/lib/AWS/CloudWatch/SetAlarmState.d.ts.map +1 -1
  51. package/lib/AWS/DynamoDB/BatchExecuteStatement.d.ts +1 -1
  52. package/lib/AWS/DynamoDB/BatchExecuteStatement.d.ts.map +1 -1
  53. package/lib/AWS/DynamoDB/BatchGetItem.d.ts +1 -1
  54. package/lib/AWS/DynamoDB/BatchGetItem.d.ts.map +1 -1
  55. package/lib/AWS/DynamoDB/BatchWriteItem.d.ts +1 -1
  56. package/lib/AWS/DynamoDB/BatchWriteItem.d.ts.map +1 -1
  57. package/lib/AWS/DynamoDB/DeleteItem.d.ts +1 -1
  58. package/lib/AWS/DynamoDB/DeleteItem.d.ts.map +1 -1
  59. package/lib/AWS/DynamoDB/DescribeTable.d.ts +1 -1
  60. package/lib/AWS/DynamoDB/DescribeTable.d.ts.map +1 -1
  61. package/lib/AWS/DynamoDB/DescribeTimeToLive.d.ts +1 -1
  62. package/lib/AWS/DynamoDB/DescribeTimeToLive.d.ts.map +1 -1
  63. package/lib/AWS/DynamoDB/ExecuteStatement.d.ts +1 -1
  64. package/lib/AWS/DynamoDB/ExecuteStatement.d.ts.map +1 -1
  65. package/lib/AWS/DynamoDB/ExecuteTransaction.d.ts +1 -1
  66. package/lib/AWS/DynamoDB/ExecuteTransaction.d.ts.map +1 -1
  67. package/lib/AWS/DynamoDB/GetItem.d.ts +1 -1
  68. package/lib/AWS/DynamoDB/GetItem.d.ts.map +1 -1
  69. package/lib/AWS/DynamoDB/ListTables.d.ts +1 -1
  70. package/lib/AWS/DynamoDB/ListTables.d.ts.map +1 -1
  71. package/lib/AWS/DynamoDB/ListTagsOfResource.d.ts +1 -1
  72. package/lib/AWS/DynamoDB/ListTagsOfResource.d.ts.map +1 -1
  73. package/lib/AWS/DynamoDB/PutItem.d.ts +1 -1
  74. package/lib/AWS/DynamoDB/PutItem.d.ts.map +1 -1
  75. package/lib/AWS/DynamoDB/Query.d.ts +1 -1
  76. package/lib/AWS/DynamoDB/Query.d.ts.map +1 -1
  77. package/lib/AWS/DynamoDB/RestoreTableToPointInTime.d.ts +1 -1
  78. package/lib/AWS/DynamoDB/RestoreTableToPointInTime.d.ts.map +1 -1
  79. package/lib/AWS/DynamoDB/Scan.d.ts +1 -1
  80. package/lib/AWS/DynamoDB/Scan.d.ts.map +1 -1
  81. package/lib/AWS/DynamoDB/TransactGetItems.d.ts +1 -1
  82. package/lib/AWS/DynamoDB/TransactGetItems.d.ts.map +1 -1
  83. package/lib/AWS/DynamoDB/TransactWriteItems.d.ts +1 -1
  84. package/lib/AWS/DynamoDB/TransactWriteItems.d.ts.map +1 -1
  85. package/lib/AWS/DynamoDB/UpdateItem.d.ts +1 -1
  86. package/lib/AWS/DynamoDB/UpdateItem.d.ts.map +1 -1
  87. package/lib/AWS/DynamoDB/UpdateTimeToLive.d.ts +1 -1
  88. package/lib/AWS/DynamoDB/UpdateTimeToLive.d.ts.map +1 -1
  89. package/lib/AWS/ECS/DescribeTasks.d.ts +1 -1
  90. package/lib/AWS/ECS/DescribeTasks.d.ts.map +1 -1
  91. package/lib/AWS/ECS/ListTasks.d.ts +1 -1
  92. package/lib/AWS/ECS/ListTasks.d.ts.map +1 -1
  93. package/lib/AWS/ECS/RunTask.d.ts +1 -1
  94. package/lib/AWS/ECS/RunTask.d.ts.map +1 -1
  95. package/lib/AWS/ECS/StopTask.d.ts +1 -1
  96. package/lib/AWS/ECS/StopTask.d.ts.map +1 -1
  97. package/lib/AWS/EventBridge/DescribeEventBus.d.ts +1 -1
  98. package/lib/AWS/EventBridge/DescribeEventBus.d.ts.map +1 -1
  99. package/lib/AWS/EventBridge/DescribeRule.d.ts +1 -1
  100. package/lib/AWS/EventBridge/DescribeRule.d.ts.map +1 -1
  101. package/lib/AWS/EventBridge/EventSource.d.ts +2 -2
  102. package/lib/AWS/EventBridge/ListEventBuses.d.ts +1 -1
  103. package/lib/AWS/EventBridge/ListEventBuses.d.ts.map +1 -1
  104. package/lib/AWS/EventBridge/ListRules.d.ts +1 -1
  105. package/lib/AWS/EventBridge/ListRules.d.ts.map +1 -1
  106. package/lib/AWS/EventBridge/ListTargetsByRule.d.ts +1 -1
  107. package/lib/AWS/EventBridge/ListTargetsByRule.d.ts.map +1 -1
  108. package/lib/AWS/EventBridge/PutEvents.d.ts +1 -1
  109. package/lib/AWS/EventBridge/PutEvents.d.ts.map +1 -1
  110. package/lib/AWS/EventBridge/TestEventPattern.d.ts +1 -1
  111. package/lib/AWS/EventBridge/TestEventPattern.d.ts.map +1 -1
  112. package/lib/AWS/EventBridge/ToLambda.d.ts +1 -1
  113. package/lib/AWS/EventBridge/ToLambda.d.ts.map +1 -1
  114. package/lib/AWS/EventBridge/ToQueue.d.ts +1 -1
  115. package/lib/AWS/EventBridge/ToQueue.d.ts.map +1 -1
  116. package/lib/AWS/Kinesis/DescribeAccountSettings.d.ts +1 -1
  117. package/lib/AWS/Kinesis/DescribeAccountSettings.d.ts.map +1 -1
  118. package/lib/AWS/Kinesis/DescribeLimits.d.ts +1 -1
  119. package/lib/AWS/Kinesis/DescribeLimits.d.ts.map +1 -1
  120. package/lib/AWS/Kinesis/DescribeStream.d.ts +1 -1
  121. package/lib/AWS/Kinesis/DescribeStream.d.ts.map +1 -1
  122. package/lib/AWS/Kinesis/DescribeStreamConsumer.d.ts +1 -1
  123. package/lib/AWS/Kinesis/DescribeStreamConsumer.d.ts.map +1 -1
  124. package/lib/AWS/Kinesis/DescribeStreamSummary.d.ts +1 -1
  125. package/lib/AWS/Kinesis/DescribeStreamSummary.d.ts.map +1 -1
  126. package/lib/AWS/Kinesis/GetRecords.d.ts +1 -1
  127. package/lib/AWS/Kinesis/GetRecords.d.ts.map +1 -1
  128. package/lib/AWS/Kinesis/GetResourcePolicy.d.ts +1 -1
  129. package/lib/AWS/Kinesis/GetResourcePolicy.d.ts.map +1 -1
  130. package/lib/AWS/Kinesis/GetShardIterator.d.ts +1 -1
  131. package/lib/AWS/Kinesis/GetShardIterator.d.ts.map +1 -1
  132. package/lib/AWS/Kinesis/ListShards.d.ts +1 -1
  133. package/lib/AWS/Kinesis/ListShards.d.ts.map +1 -1
  134. package/lib/AWS/Kinesis/ListStreamConsumers.d.ts +1 -1
  135. package/lib/AWS/Kinesis/ListStreamConsumers.d.ts.map +1 -1
  136. package/lib/AWS/Kinesis/ListStreams.d.ts +1 -1
  137. package/lib/AWS/Kinesis/ListStreams.d.ts.map +1 -1
  138. package/lib/AWS/Kinesis/ListTagsForResource.d.ts +1 -1
  139. package/lib/AWS/Kinesis/ListTagsForResource.d.ts.map +1 -1
  140. package/lib/AWS/Kinesis/PutRecord.d.ts +1 -1
  141. package/lib/AWS/Kinesis/PutRecord.d.ts.map +1 -1
  142. package/lib/AWS/Kinesis/PutRecords.d.ts +1 -1
  143. package/lib/AWS/Kinesis/PutRecords.d.ts.map +1 -1
  144. package/lib/AWS/Kinesis/StreamSink.d.ts +1 -1
  145. package/lib/AWS/Kinesis/StreamSink.d.ts.map +1 -1
  146. package/lib/AWS/Kinesis/SubscribeToShard.d.ts +1 -1
  147. package/lib/AWS/Kinesis/SubscribeToShard.d.ts.map +1 -1
  148. package/lib/AWS/Lambda/BucketEventSource.d.ts +2 -1
  149. package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
  150. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +2 -1
  151. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.map +1 -1
  152. package/lib/AWS/Lambda/InvokeFunction.d.ts +1 -1
  153. package/lib/AWS/Lambda/InvokeFunction.d.ts.map +1 -1
  154. package/lib/AWS/Lambda/QueueEventSource.d.ts +2 -1
  155. package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
  156. package/lib/AWS/Lambda/StreamEventSource.d.ts +2 -1
  157. package/lib/AWS/Lambda/StreamEventSource.d.ts.map +1 -1
  158. package/lib/AWS/Lambda/TableEventSource.d.ts +2 -1
  159. package/lib/AWS/Lambda/TableEventSource.d.ts.map +1 -1
  160. package/lib/AWS/Lambda/TopicEventSource.d.ts +2 -1
  161. package/lib/AWS/Lambda/TopicEventSource.d.ts.map +1 -1
  162. package/lib/AWS/RDS/Connect.d.ts +1 -1
  163. package/lib/AWS/RDS/Connect.d.ts.map +1 -1
  164. package/lib/AWS/RDSData/BatchExecuteStatement.d.ts +1 -1
  165. package/lib/AWS/RDSData/BatchExecuteStatement.d.ts.map +1 -1
  166. package/lib/AWS/RDSData/BeginTransaction.d.ts +1 -1
  167. package/lib/AWS/RDSData/BeginTransaction.d.ts.map +1 -1
  168. package/lib/AWS/RDSData/CommitTransaction.d.ts +1 -1
  169. package/lib/AWS/RDSData/CommitTransaction.d.ts.map +1 -1
  170. package/lib/AWS/RDSData/ExecuteSql.d.ts +1 -1
  171. package/lib/AWS/RDSData/ExecuteSql.d.ts.map +1 -1
  172. package/lib/AWS/RDSData/ExecuteStatement.d.ts +1 -1
  173. package/lib/AWS/RDSData/ExecuteStatement.d.ts.map +1 -1
  174. package/lib/AWS/RDSData/RollbackTransaction.d.ts +1 -1
  175. package/lib/AWS/RDSData/RollbackTransaction.d.ts.map +1 -1
  176. package/lib/AWS/S3/AbortMultipartUpload.d.ts +1 -1
  177. package/lib/AWS/S3/AbortMultipartUpload.d.ts.map +1 -1
  178. package/lib/AWS/S3/CompleteMultipartUpload.d.ts +1 -1
  179. package/lib/AWS/S3/CompleteMultipartUpload.d.ts.map +1 -1
  180. package/lib/AWS/S3/CopyObject.d.ts +1 -1
  181. package/lib/AWS/S3/CopyObject.d.ts.map +1 -1
  182. package/lib/AWS/S3/CreateMultipartUpload.d.ts +1 -1
  183. package/lib/AWS/S3/CreateMultipartUpload.d.ts.map +1 -1
  184. package/lib/AWS/S3/DeleteObject.d.ts +1 -1
  185. package/lib/AWS/S3/DeleteObject.d.ts.map +1 -1
  186. package/lib/AWS/S3/GetObject.d.ts +1 -1
  187. package/lib/AWS/S3/GetObject.d.ts.map +1 -1
  188. package/lib/AWS/S3/HeadObject.d.ts +1 -1
  189. package/lib/AWS/S3/HeadObject.d.ts.map +1 -1
  190. package/lib/AWS/S3/ListObjectsV2.d.ts +1 -1
  191. package/lib/AWS/S3/ListObjectsV2.d.ts.map +1 -1
  192. package/lib/AWS/S3/PutObject.d.ts +1 -1
  193. package/lib/AWS/S3/PutObject.d.ts.map +1 -1
  194. package/lib/AWS/S3/UploadPart.d.ts +1 -1
  195. package/lib/AWS/S3/UploadPart.d.ts.map +1 -1
  196. package/lib/AWS/SNS/AddPermission.d.ts +1 -1
  197. package/lib/AWS/SNS/AddPermission.d.ts.map +1 -1
  198. package/lib/AWS/SNS/ConfirmSubscription.d.ts +1 -1
  199. package/lib/AWS/SNS/ConfirmSubscription.d.ts.map +1 -1
  200. package/lib/AWS/SNS/GetDataProtectionPolicy.d.ts +1 -1
  201. package/lib/AWS/SNS/GetDataProtectionPolicy.d.ts.map +1 -1
  202. package/lib/AWS/SNS/GetSubscriptionAttributes.d.ts +1 -1
  203. package/lib/AWS/SNS/GetSubscriptionAttributes.d.ts.map +1 -1
  204. package/lib/AWS/SNS/GetTopicAttributes.d.ts +1 -1
  205. package/lib/AWS/SNS/GetTopicAttributes.d.ts.map +1 -1
  206. package/lib/AWS/SNS/ListSubscriptions.d.ts +1 -1
  207. package/lib/AWS/SNS/ListSubscriptions.d.ts.map +1 -1
  208. package/lib/AWS/SNS/ListSubscriptionsByTopic.d.ts +1 -1
  209. package/lib/AWS/SNS/ListSubscriptionsByTopic.d.ts.map +1 -1
  210. package/lib/AWS/SNS/ListTagsForResource.d.ts +1 -1
  211. package/lib/AWS/SNS/ListTagsForResource.d.ts.map +1 -1
  212. package/lib/AWS/SNS/ListTopics.d.ts +1 -1
  213. package/lib/AWS/SNS/ListTopics.d.ts.map +1 -1
  214. package/lib/AWS/SNS/Publish.d.ts +1 -1
  215. package/lib/AWS/SNS/Publish.d.ts.map +1 -1
  216. package/lib/AWS/SNS/PublishBatch.d.ts +1 -1
  217. package/lib/AWS/SNS/PublishBatch.d.ts.map +1 -1
  218. package/lib/AWS/SNS/PutDataProtectionPolicy.d.ts +1 -1
  219. package/lib/AWS/SNS/PutDataProtectionPolicy.d.ts.map +1 -1
  220. package/lib/AWS/SNS/RemovePermission.d.ts +1 -1
  221. package/lib/AWS/SNS/RemovePermission.d.ts.map +1 -1
  222. package/lib/AWS/SNS/SetSubscriptionAttributes.d.ts +1 -1
  223. package/lib/AWS/SNS/SetSubscriptionAttributes.d.ts.map +1 -1
  224. package/lib/AWS/SNS/SetTopicAttributes.d.ts +1 -1
  225. package/lib/AWS/SNS/SetTopicAttributes.d.ts.map +1 -1
  226. package/lib/AWS/SNS/TagResource.d.ts +1 -1
  227. package/lib/AWS/SNS/TagResource.d.ts.map +1 -1
  228. package/lib/AWS/SNS/TopicSink.d.ts +1 -1
  229. package/lib/AWS/SNS/TopicSink.d.ts.map +1 -1
  230. package/lib/AWS/SNS/UntagResource.d.ts +1 -1
  231. package/lib/AWS/SNS/UntagResource.d.ts.map +1 -1
  232. package/lib/AWS/SQS/DeleteMessage.d.ts +1 -1
  233. package/lib/AWS/SQS/DeleteMessage.d.ts.map +1 -1
  234. package/lib/AWS/SQS/DeleteMessageBatch.d.ts +1 -1
  235. package/lib/AWS/SQS/DeleteMessageBatch.d.ts.map +1 -1
  236. package/lib/AWS/SQS/QueueSink.d.ts +1 -1
  237. package/lib/AWS/SQS/QueueSink.d.ts.map +1 -1
  238. package/lib/AWS/SQS/ReceiveMessage.d.ts +1 -1
  239. package/lib/AWS/SQS/ReceiveMessage.d.ts.map +1 -1
  240. package/lib/AWS/SQS/SendMessage.d.ts +1 -1
  241. package/lib/AWS/SQS/SendMessage.d.ts.map +1 -1
  242. package/lib/AWS/SQS/SendMessageBatch.d.ts +1 -1
  243. package/lib/AWS/SQS/SendMessageBatch.d.ts.map +1 -1
  244. package/lib/AWS/SecretsManager/DescribeSecret.d.ts +1 -1
  245. package/lib/AWS/SecretsManager/DescribeSecret.d.ts.map +1 -1
  246. package/lib/AWS/SecretsManager/GetRandomPassword.d.ts +1 -1
  247. package/lib/AWS/SecretsManager/GetRandomPassword.d.ts.map +1 -1
  248. package/lib/AWS/SecretsManager/GetSecretValue.d.ts +1 -1
  249. package/lib/AWS/SecretsManager/GetSecretValue.d.ts.map +1 -1
  250. package/lib/AWS/SecretsManager/ListSecrets.d.ts +1 -1
  251. package/lib/AWS/SecretsManager/ListSecrets.d.ts.map +1 -1
  252. package/lib/AWS/SecretsManager/PutSecretValue.d.ts +1 -1
  253. package/lib/AWS/SecretsManager/PutSecretValue.d.ts.map +1 -1
  254. package/lib/Binding.d.ts +1 -1
  255. package/lib/Binding.d.ts.map +1 -1
  256. package/lib/Bundle/Docker.d.ts.map +1 -1
  257. package/lib/Bundle/Docker.js +12 -13
  258. package/lib/Bundle/Docker.js.map +1 -1
  259. package/lib/Cli/commands/deploy.d.ts.map +1 -1
  260. package/lib/Cli/commands/deploy.js +1 -0
  261. package/lib/Cli/commands/deploy.js.map +1 -1
  262. package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts +8 -7
  263. package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts.map +1 -1
  264. package/lib/Cloudflare/AiGateway/AiGatewayBinding.js +2 -6
  265. package/lib/Cloudflare/AiGateway/AiGatewayBinding.js.map +1 -1
  266. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts +4 -3
  267. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts.map +1 -1
  268. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +2 -1
  269. package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -1
  270. package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts +8 -7
  271. package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts.map +1 -1
  272. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +2 -2
  273. package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
  274. package/lib/Cloudflare/D1/D1Connection.d.ts +12 -10
  275. package/lib/Cloudflare/D1/D1Connection.d.ts.map +1 -1
  276. package/lib/Cloudflare/D1/D1Connection.js +2 -2
  277. package/lib/Cloudflare/D1/D1Connection.js.map +1 -1
  278. package/lib/Cloudflare/D1/D1Database.js +1 -1
  279. package/lib/Cloudflare/D1/D1Database.js.map +1 -1
  280. package/lib/Cloudflare/D1/D1Migrations.d.ts +2 -2
  281. package/lib/Cloudflare/D1/D1Migrations.d.ts.map +1 -1
  282. package/lib/Cloudflare/Email/SendEmailBinding.d.ts +5 -4
  283. package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -1
  284. package/lib/Cloudflare/Email/SendEmailBinding.js +2 -1
  285. package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -1
  286. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts +10 -8
  287. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts.map +1 -1
  288. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js +2 -2
  289. package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js.map +1 -1
  290. package/lib/Cloudflare/Images/ImagesBinding.d.ts +5 -4
  291. package/lib/Cloudflare/Images/ImagesBinding.d.ts.map +1 -1
  292. package/lib/Cloudflare/Images/ImagesBinding.js +4 -2
  293. package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
  294. package/lib/Cloudflare/KV/KVNamespaceBinding.d.ts +33 -32
  295. package/lib/Cloudflare/KV/KVNamespaceBinding.d.ts.map +1 -1
  296. package/lib/Cloudflare/KV/KVNamespaceBinding.js +5 -2
  297. package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +1 -1
  298. package/lib/Cloudflare/Queue/QueueBinding.d.ts +5 -4
  299. package/lib/Cloudflare/Queue/QueueBinding.d.ts.map +1 -1
  300. package/lib/Cloudflare/Queue/QueueBinding.js +2 -2
  301. package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
  302. package/lib/Cloudflare/Queue/QueueEventSource.d.ts +1 -2
  303. package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -1
  304. package/lib/Cloudflare/R2/R2BucketBinding.d.ts +13 -12
  305. package/lib/Cloudflare/R2/R2BucketBinding.d.ts.map +1 -1
  306. package/lib/Cloudflare/R2/R2BucketBinding.js +2 -2
  307. package/lib/Cloudflare/R2/R2BucketBinding.js.map +1 -1
  308. package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts +5 -4
  309. package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts.map +1 -1
  310. package/lib/Cloudflare/SecretsStore/SecretBinding.js +2 -2
  311. package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
  312. package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
  313. package/lib/Cloudflare/Workers/CronEventSource.d.ts +1 -2
  314. package/lib/Cloudflare/Workers/CronEventSource.d.ts.map +1 -1
  315. package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
  316. package/lib/Cloudflare/Workers/DurableObjectNamespace.js +6 -3
  317. package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
  318. package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts.map +1 -1
  319. package/lib/Cloudflare/Workers/DynamicWorkerLoader.js +3 -3
  320. package/lib/Cloudflare/Workers/DynamicWorkerLoader.js.map +1 -1
  321. package/lib/Cloudflare/Workers/Fetch.d.ts +1 -1
  322. package/lib/Cloudflare/Workers/Fetch.d.ts.map +1 -1
  323. package/lib/Cloudflare/Workers/RpcAsync.d.ts +55 -0
  324. package/lib/Cloudflare/Workers/RpcAsync.d.ts.map +1 -1
  325. package/lib/Cloudflare/Workers/RpcAsync.js +55 -0
  326. package/lib/Cloudflare/Workers/RpcAsync.js.map +1 -1
  327. package/lib/Cloudflare/Workers/Worker.d.ts +3 -3
  328. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  329. package/lib/Cloudflare/Workers/Worker.js +9 -2
  330. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  331. package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
  332. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +2 -0
  333. package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
  334. package/lib/Cloudflare/Workers/Workflow.d.ts +4 -4
  335. package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
  336. package/lib/Cloudflare/Workers/Workflow.js +6 -3
  337. package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
  338. package/lib/Neon/Branch.js +1 -1
  339. package/lib/Neon/Branch.js.map +1 -1
  340. package/lib/Neon/Migrations.d.ts +1 -1
  341. package/lib/Neon/Migrations.d.ts.map +1 -1
  342. package/lib/Neon/Project.d.ts.map +1 -1
  343. package/lib/Neon/Project.js +1 -15
  344. package/lib/Neon/Project.js.map +1 -1
  345. package/lib/Phase.d.ts +2 -2
  346. package/lib/Phase.d.ts.map +1 -1
  347. package/lib/Phase.js +2 -1
  348. package/lib/Phase.js.map +1 -1
  349. package/lib/Planetscale/AuthProvider.d.ts +59 -0
  350. package/lib/Planetscale/AuthProvider.d.ts.map +1 -0
  351. package/lib/Planetscale/AuthProvider.js +131 -0
  352. package/lib/Planetscale/AuthProvider.js.map +1 -0
  353. package/lib/Planetscale/Branch.d.ts +113 -0
  354. package/lib/Planetscale/Branch.d.ts.map +1 -0
  355. package/lib/Planetscale/Branch.js +287 -0
  356. package/lib/Planetscale/Branch.js.map +1 -0
  357. package/lib/Planetscale/Credentials.d.ts +35 -0
  358. package/lib/Planetscale/Credentials.d.ts.map +1 -0
  359. package/lib/Planetscale/Credentials.js +56 -0
  360. package/lib/Planetscale/Credentials.js.map +1 -0
  361. package/lib/Planetscale/Database.d.ts +117 -0
  362. package/lib/Planetscale/Database.d.ts.map +1 -0
  363. package/lib/Planetscale/Database.js +1 -0
  364. package/lib/Planetscale/Database.js.map +1 -0
  365. package/lib/Planetscale/MySQL/MySQLBranch.d.ts +86 -0
  366. package/lib/Planetscale/MySQL/MySQLBranch.d.ts.map +1 -0
  367. package/lib/Planetscale/MySQL/MySQLBranch.js +14 -0
  368. package/lib/Planetscale/MySQL/MySQLBranch.js.map +1 -0
  369. package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts +23 -0
  370. package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts.map +1 -0
  371. package/lib/Planetscale/MySQL/MySQLClusterSize.js +44 -0
  372. package/lib/Planetscale/MySQL/MySQLClusterSize.js.map +1 -0
  373. package/lib/Planetscale/MySQL/MySQLDatabase.d.ts +119 -0
  374. package/lib/Planetscale/MySQL/MySQLDatabase.d.ts.map +1 -0
  375. package/lib/Planetscale/MySQL/MySQLDatabase.js +237 -0
  376. package/lib/Planetscale/MySQL/MySQLDatabase.js.map +1 -0
  377. package/lib/Planetscale/MySQL/MySQLMigrations.d.ts +18 -0
  378. package/lib/Planetscale/MySQL/MySQLMigrations.d.ts.map +1 -0
  379. package/lib/Planetscale/MySQL/MySQLMigrations.js +157 -0
  380. package/lib/Planetscale/MySQL/MySQLMigrations.js.map +1 -0
  381. package/lib/Planetscale/MySQL/MySQLOrigin.d.ts +15 -0
  382. package/lib/Planetscale/MySQL/MySQLOrigin.d.ts.map +1 -0
  383. package/lib/Planetscale/MySQL/MySQLOrigin.js +2 -0
  384. package/lib/Planetscale/MySQL/MySQLOrigin.js.map +1 -0
  385. package/lib/Planetscale/MySQL/MySQLPassword.d.ts +115 -0
  386. package/lib/Planetscale/MySQL/MySQLPassword.d.ts.map +1 -0
  387. package/lib/Planetscale/MySQL/MySQLPassword.js +197 -0
  388. package/lib/Planetscale/MySQL/MySQLPassword.js.map +1 -0
  389. package/lib/Planetscale/MySQL/index.d.ts +6 -0
  390. package/lib/Planetscale/MySQL/index.d.ts.map +1 -0
  391. package/lib/Planetscale/MySQL/index.js +6 -0
  392. package/lib/Planetscale/MySQL/index.js.map +1 -0
  393. package/lib/Planetscale/Postgres/PostgresBranch.d.ts +67 -0
  394. package/lib/Planetscale/Postgres/PostgresBranch.d.ts.map +1 -0
  395. package/lib/Planetscale/Postgres/PostgresBranch.js +14 -0
  396. package/lib/Planetscale/Postgres/PostgresBranch.js.map +1 -0
  397. package/lib/Planetscale/Postgres/PostgresClusterSize.d.ts +44 -0
  398. package/lib/Planetscale/Postgres/PostgresClusterSize.d.ts.map +1 -0
  399. package/lib/Planetscale/Postgres/PostgresClusterSize.js +72 -0
  400. package/lib/Planetscale/Postgres/PostgresClusterSize.js.map +1 -0
  401. package/lib/Planetscale/Postgres/PostgresDatabase.d.ts +73 -0
  402. package/lib/Planetscale/Postgres/PostgresDatabase.d.ts.map +1 -0
  403. package/lib/Planetscale/Postgres/PostgresDatabase.js +241 -0
  404. package/lib/Planetscale/Postgres/PostgresDatabase.js.map +1 -0
  405. package/lib/Planetscale/Postgres/PostgresDefaultRole.d.ts +85 -0
  406. package/lib/Planetscale/Postgres/PostgresDefaultRole.d.ts.map +1 -0
  407. package/lib/Planetscale/Postgres/PostgresDefaultRole.js +142 -0
  408. package/lib/Planetscale/Postgres/PostgresDefaultRole.js.map +1 -0
  409. package/lib/Planetscale/Postgres/PostgresMigrations.d.ts +18 -0
  410. package/lib/Planetscale/Postgres/PostgresMigrations.d.ts.map +1 -0
  411. package/lib/Planetscale/Postgres/PostgresMigrations.js +148 -0
  412. package/lib/Planetscale/Postgres/PostgresMigrations.js.map +1 -0
  413. package/lib/Planetscale/Postgres/PostgresOrigin.d.ts +15 -0
  414. package/lib/Planetscale/Postgres/PostgresOrigin.d.ts.map +1 -0
  415. package/lib/Planetscale/Postgres/PostgresOrigin.js +2 -0
  416. package/lib/Planetscale/Postgres/PostgresOrigin.js.map +1 -0
  417. package/lib/Planetscale/Postgres/PostgresRole.d.ts +121 -0
  418. package/lib/Planetscale/Postgres/PostgresRole.d.ts.map +1 -0
  419. package/lib/Planetscale/Postgres/PostgresRole.js +228 -0
  420. package/lib/Planetscale/Postgres/PostgresRole.js.map +1 -0
  421. package/lib/Planetscale/Postgres/index.d.ts +7 -0
  422. package/lib/Planetscale/Postgres/index.d.ts.map +1 -0
  423. package/lib/Planetscale/Postgres/index.js +7 -0
  424. package/lib/Planetscale/Postgres/index.js.map +1 -0
  425. package/lib/Planetscale/Providers.d.ts +25 -0
  426. package/lib/Planetscale/Providers.d.ts.map +1 -0
  427. package/lib/Planetscale/Providers.js +40 -0
  428. package/lib/Planetscale/Providers.js.map +1 -0
  429. package/lib/Planetscale/Util.d.ts +182 -0
  430. package/lib/Planetscale/Util.d.ts.map +1 -0
  431. package/lib/Planetscale/Util.js +98 -0
  432. package/lib/Planetscale/Util.js.map +1 -0
  433. package/lib/Planetscale/index.d.ts +9 -0
  434. package/lib/Planetscale/index.d.ts.map +1 -0
  435. package/lib/Planetscale/index.js +9 -0
  436. package/lib/Planetscale/index.js.map +1 -0
  437. package/lib/Platform.d.ts.map +1 -1
  438. package/lib/Platform.js +7 -2
  439. package/lib/Platform.js.map +1 -1
  440. package/lib/RuntimeContext.d.ts +7 -3
  441. package/lib/RuntimeContext.d.ts.map +1 -1
  442. package/lib/RuntimeContext.js +3 -2
  443. package/lib/RuntimeContext.js.map +1 -1
  444. package/lib/Server/S3BucketEventSource.d.ts +1 -1
  445. package/lib/Server/S3BucketEventSource.d.ts.map +1 -1
  446. package/lib/{Neon → Sql}/SqlFile.d.ts +2 -0
  447. package/lib/Sql/SqlFile.d.ts.map +1 -0
  448. package/lib/{Neon → Sql}/SqlFile.js +14 -0
  449. package/lib/Sql/SqlFile.js.map +1 -0
  450. package/lib/Sql/index.d.ts +2 -0
  451. package/lib/Sql/index.d.ts.map +1 -0
  452. package/lib/Sql/index.js +2 -0
  453. package/lib/Sql/index.js.map +1 -0
  454. package/lib/tsconfig.test.tsbuildinfo +1 -1
  455. package/package.json +20 -6
  456. package/src/Binding.ts +1 -1
  457. package/src/Bundle/Docker.ts +12 -15
  458. package/src/Cli/commands/deploy.ts +1 -0
  459. package/src/Cloudflare/AiGateway/AiGatewayBinding.ts +11 -16
  460. package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +7 -9
  461. package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +11 -22
  462. package/src/Cloudflare/D1/D1Connection.ts +31 -18
  463. package/src/Cloudflare/D1/D1Database.ts +1 -1
  464. package/src/Cloudflare/D1/D1Migrations.ts +2 -2
  465. package/src/Cloudflare/Email/SendEmailBinding.ts +7 -5
  466. package/src/Cloudflare/Hyperdrive/HyperdriveBinding.ts +16 -12
  467. package/src/Cloudflare/Images/ImagesBinding.ts +8 -8
  468. package/src/Cloudflare/KV/KVNamespaceBinding.ts +38 -38
  469. package/src/Cloudflare/Queue/QueueBinding.ts +7 -6
  470. package/src/Cloudflare/R2/R2BucketBinding.ts +16 -19
  471. package/src/Cloudflare/SecretsStore/SecretBinding.ts +11 -13
  472. package/src/Cloudflare/Workers/DurableObjectNamespace.ts +6 -6
  473. package/src/Cloudflare/Workers/DynamicWorkerLoader.ts +4 -5
  474. package/src/Cloudflare/Workers/RpcAsync.ts +55 -0
  475. package/src/Cloudflare/Workers/Worker.ts +17 -5
  476. package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +2 -0
  477. package/src/Cloudflare/Workers/Workflow.ts +10 -11
  478. package/src/Neon/Branch.ts +1 -1
  479. package/src/Neon/Migrations.ts +1 -1
  480. package/src/Neon/Project.ts +6 -20
  481. package/src/Phase.ts +2 -0
  482. package/src/Planetscale/AuthProvider.ts +285 -0
  483. package/src/Planetscale/Branch.ts +508 -0
  484. package/src/Planetscale/Credentials.ts +96 -0
  485. package/src/Planetscale/Database.ts +129 -0
  486. package/src/Planetscale/MySQL/MySQLBranch.ts +112 -0
  487. package/src/Planetscale/MySQL/MySQLClusterSize.ts +102 -0
  488. package/src/Planetscale/MySQL/MySQLDatabase.ts +446 -0
  489. package/src/Planetscale/MySQL/MySQLMigrations.ts +271 -0
  490. package/src/Planetscale/MySQL/MySQLOrigin.ts +15 -0
  491. package/src/Planetscale/MySQL/MySQLPassword.ts +387 -0
  492. package/src/Planetscale/MySQL/index.ts +5 -0
  493. package/src/Planetscale/Postgres/PostgresBranch.ts +97 -0
  494. package/src/Planetscale/Postgres/PostgresClusterSize.ts +125 -0
  495. package/src/Planetscale/Postgres/PostgresDatabase.ts +404 -0
  496. package/src/Planetscale/Postgres/PostgresDefaultRole.ts +270 -0
  497. package/src/Planetscale/Postgres/PostgresMigrations.ts +256 -0
  498. package/src/Planetscale/Postgres/PostgresOrigin.ts +15 -0
  499. package/src/Planetscale/Postgres/PostgresRole.ts +469 -0
  500. package/src/Planetscale/Postgres/index.ts +6 -0
  501. package/src/Planetscale/Providers.ts +80 -0
  502. package/src/Planetscale/Util.ts +160 -0
  503. package/src/Planetscale/index.ts +18 -0
  504. package/src/Platform.ts +13 -1
  505. package/src/RuntimeContext.ts +7 -8
  506. package/src/{Neon → Sql}/SqlFile.ts +22 -0
  507. package/src/Sql/index.ts +1 -0
  508. package/lib/Cloudflare/D1/D1SqlFile.d.ts +0 -20
  509. package/lib/Cloudflare/D1/D1SqlFile.d.ts.map +0 -1
  510. package/lib/Cloudflare/D1/D1SqlFile.js +0 -46
  511. package/lib/Cloudflare/D1/D1SqlFile.js.map +0 -1
  512. package/lib/Neon/SqlFile.d.ts.map +0 -1
  513. package/lib/Neon/SqlFile.js.map +0 -1
  514. package/src/Cloudflare/D1/D1SqlFile.ts +0 -55
@@ -0,0 +1,97 @@
1
+ import { Resource } from "../../Resource.ts";
2
+ import {
3
+ type BaseBranchAttributes,
4
+ type BaseBranchProps,
5
+ makeBranchProvider,
6
+ } from "../Branch.ts";
7
+ import type { Providers } from "../Providers.ts";
8
+ import type { PostgresClusterSize } from "./PostgresClusterSize.ts";
9
+ import type { PostgresDatabase } from "./PostgresDatabase.ts";
10
+ import {
11
+ runPostgresImports,
12
+ runPostgresMigrations,
13
+ } from "./PostgresMigrations.ts";
14
+
15
+ /**
16
+ * Properties for creating or updating a {@link PostgresBranch}.
17
+ */
18
+ export interface PostgresBranchProps extends BaseBranchProps {
19
+ /**
20
+ * The Postgres database. Either a string database name or a
21
+ * {@link PostgresDatabase} resource.
22
+ */
23
+ database: string | PostgresDatabase;
24
+
25
+ /**
26
+ * PostgreSQL cluster size for the branch. Required if `backupId` is provided.
27
+ * Short sizes are expanded using the target branch region.
28
+ */
29
+ clusterSize?: PostgresClusterSize;
30
+
31
+ /**
32
+ * Parent branch — either a string name or another {@link PostgresBranch}.
33
+ * @default "main"
34
+ */
35
+ parentBranch?: string | PostgresBranch;
36
+ }
37
+
38
+ /**
39
+ * Output attributes of a deployed {@link PostgresBranch}.
40
+ */
41
+ export interface PostgresBranchAttributes extends BaseBranchAttributes {}
42
+
43
+ /**
44
+ * A PlanetScale branch of a {@link PostgresDatabase}. For MySQL branches
45
+ * use {@link MySQLBranch} instead.
46
+ *
47
+ * @section Creating a Branch
48
+ * @example Branch from main
49
+ * ```typescript
50
+ * const branch = yield* Planetscale.PostgresBranch("Feature123", {
51
+ * database: "my-db",
52
+ * parentBranch: "main",
53
+ * });
54
+ * ```
55
+ *
56
+ * @example Branch from a PostgresDatabase resource
57
+ * ```typescript
58
+ * const db = yield* Planetscale.PostgresDatabase("MyDb", { clusterSize: "PS_10" });
59
+ * const branch = yield* Planetscale.PostgresBranch("Feature456", {
60
+ * database: db,
61
+ * parentBranch: "main",
62
+ * });
63
+ * ```
64
+ *
65
+ * @section Migrations and seed data
66
+ * @example Apply migrations on a branch
67
+ * ```typescript
68
+ * const branch = yield* Planetscale.PostgresBranch("Feature123", {
69
+ * database: db,
70
+ * parentBranch: "main",
71
+ * migrationsDir: "./migrations",
72
+ * importFiles: ["./seed.sql"],
73
+ * });
74
+ * ```
75
+ */
76
+ export type PostgresBranch = Resource<
77
+ "Planetscale.PostgresBranch",
78
+ PostgresBranchProps,
79
+ PostgresBranchAttributes,
80
+ never,
81
+ Providers
82
+ >;
83
+
84
+ export const PostgresBranch = Resource<PostgresBranch>(
85
+ "Planetscale.PostgresBranch",
86
+ );
87
+
88
+ export const PostgresBranchProvider = () =>
89
+ makeBranchProvider({
90
+ resource: PostgresBranch,
91
+ expectedKind: "postgresql",
92
+ engineLabel: "PostgresBranch",
93
+ runners: {
94
+ runMigrations: runPostgresMigrations,
95
+ runImports: runPostgresImports,
96
+ },
97
+ });
@@ -0,0 +1,125 @@
1
+ import * as ops from "@distilled.cloud/planetscale/Operations";
2
+ import * as Effect from "effect/Effect";
3
+ import { pollUntil } from "../Util.ts";
4
+
5
+ /**
6
+ * Available PlanetScale PostgreSQL cluster sizes.
7
+ *
8
+ * `PS_*` sizes are backed by network-attached storage (NAS) and can be
9
+ * specified either as the short size (`"PS_10"`) or the API SKU
10
+ * (`"PS_10_AWS_X86"`). Short NAS sizes are expanded to a SKU by
11
+ * {@link toPostgresClusterSku} using the target region and arch.
12
+ *
13
+ * @see https://planetscale.com/docs/postgres/pricing
14
+ */
15
+ export type PostgresClusterSize =
16
+ | "PS_DEV"
17
+ | "PS_5"
18
+ | "PS_10"
19
+ | "PS_20"
20
+ | "PS_40"
21
+ | "PS_80"
22
+ | "PS_160"
23
+ | "PS_320"
24
+ | "PS_640"
25
+ | "PS_1280"
26
+ | "PS_2560"
27
+ | (string & {});
28
+
29
+ /**
30
+ * Converts a {@link PostgresClusterSize} into the SKU string expected by
31
+ * the PlanetScale API.
32
+ *
33
+ * For NAS-backed clusters, the API expects a suffixed name like
34
+ * `PS_<size>_<provider>_<arch>`. Short `PS_*` sizes are expanded using the
35
+ * supplied region and arch.
36
+ *
37
+ * Metal-backed sizes (anything starting with `M`) are passed through
38
+ * unchanged. The short `M_*` form is not a valid SKU on its own — the API
39
+ * requires the full Metal SKU (e.g. `M6_640_AWS_INTEL_D_METAL_474`), which
40
+ * encodes the CPU series, provider, arch, and storage size
41
+ *
42
+ * Already-suffixed NAS sizes are also passed through unchanged.
43
+ */
44
+ export function toPostgresClusterSku(input: {
45
+ size: PostgresClusterSize;
46
+ arch?: "x86" | "arm";
47
+ region?: string;
48
+ }): string {
49
+ const size = input.size;
50
+ if (!size.startsWith("PS_") || size.match(/(AWS|GCP)/)) return size;
51
+ // Not all AWS regions start with "aws-", but all GCP regions start with "gcp-".
52
+ const provider = input.region?.startsWith("gcp") ? "GCP" : "AWS";
53
+ const arch = (input.arch ?? "x86").toUpperCase();
54
+ return `${size}_${provider}_${arch}`;
55
+ }
56
+
57
+ /**
58
+ * Polls branch change requests until all visible changes are in a terminal
59
+ * state (`completed` or `canceled`), or — if `changeId` is provided — until
60
+ * that specific change reaches a terminal state.
61
+ */
62
+ export const waitForPendingPostgresChanges = Effect.fn(function* (
63
+ organization: string,
64
+ database: string,
65
+ branch: string,
66
+ changeId?: string,
67
+ ) {
68
+ yield* pollUntil(
69
+ `changes for branch "${branch}"`,
70
+ ops.listBranchChangeRequests({
71
+ organization,
72
+ database,
73
+ branch,
74
+ page: 1,
75
+ per_page: 25,
76
+ }),
77
+ (page) => {
78
+ const isTerminal = (state: string) =>
79
+ state === "completed" || state === "canceled";
80
+
81
+ if (changeId) {
82
+ const change = page.data.find((change) => change.id === changeId);
83
+ return change ? isTerminal(change.state) : false;
84
+ }
85
+
86
+ return page.data.every((change) => isTerminal(change.state));
87
+ },
88
+ );
89
+ });
90
+
91
+ /**
92
+ * Ensures a PostgreSQL production branch has the expected cluster size,
93
+ * queuing the change via the change-request API if it doesn't.
94
+ */
95
+ export const ensurePostgresProductionBranchClusterSize = Effect.fn(function* (
96
+ organization: string,
97
+ database: string,
98
+ branch: string,
99
+ expectedClusterSize: PostgresClusterSize,
100
+ ) {
101
+ const data = yield* ops.getBranch({ organization, database, branch });
102
+
103
+ const sku = toPostgresClusterSku({
104
+ size: expectedClusterSize,
105
+ arch: data.cluster_architecture === "aarch64" ? "arm" : "x86",
106
+ region: data.region.slug,
107
+ });
108
+
109
+ if (data.cluster_name === sku) {
110
+ return;
111
+ }
112
+ yield* waitForPendingPostgresChanges(organization, database, branch);
113
+ const change = yield* ops.updateBranchChangeRequest({
114
+ organization,
115
+ database,
116
+ branch,
117
+ cluster_size: sku,
118
+ });
119
+ yield* waitForPendingPostgresChanges(
120
+ organization,
121
+ database,
122
+ branch,
123
+ change.id,
124
+ );
125
+ });
@@ -0,0 +1,404 @@
1
+ import { Credentials } from "@distilled.cloud/planetscale/Credentials";
2
+ import * as ops from "@distilled.cloud/planetscale/Operations";
3
+ import * as Effect from "effect/Effect";
4
+ import { isResolved } from "../../Diff.ts";
5
+ import { createPhysicalName } from "../../PhysicalName.ts";
6
+ import * as Provider from "../../Provider.ts";
7
+ import { Resource } from "../../Resource.ts";
8
+ import {
9
+ ensurePostgresProductionBranchClusterSize,
10
+ toPostgresClusterSku,
11
+ type PostgresClusterSize,
12
+ } from "./PostgresClusterSize.ts";
13
+ import type { BaseDatabaseAttributes, BaseDatabaseProps } from "../Database.ts";
14
+ import {
15
+ runPostgresImports,
16
+ runPostgresMigrations,
17
+ } from "./PostgresMigrations.ts";
18
+ import { hashImports, hashMigrations } from "../../Sql/SqlFile.ts";
19
+ import type { Providers } from "../Providers.ts";
20
+ import {
21
+ DEFAULT_MIGRATIONS_TABLE,
22
+ PlanetscaleConflict,
23
+ recordsEqual,
24
+ waitForBranchReady,
25
+ waitForDatabaseReady,
26
+ } from "../Util.ts";
27
+
28
+ /**
29
+ * Properties for creating or updating a PostgreSQL PlanetScale database.
30
+ */
31
+ export interface PostgresDatabaseProps extends BaseDatabaseProps {
32
+ /**
33
+ * The PostgreSQL database cluster size. Required.
34
+ * Short sizes are expanded using the target region and architecture.
35
+ * @see https://planetscale.com/docs/postgres/pricing
36
+ */
37
+ clusterSize: PostgresClusterSize;
38
+
39
+ /**
40
+ * PostgreSQL major version. Defaults to the latest available major
41
+ * version.
42
+ */
43
+ majorVersion?: string;
44
+
45
+ /**
46
+ * CPU architecture. Cannot be changed after creation.
47
+ * @default "x86"
48
+ */
49
+ arch?: "x86" | "arm";
50
+ }
51
+
52
+ /**
53
+ * Output attributes of a deployed PostgreSQL PlanetScale database.
54
+ */
55
+ export interface PostgresDatabaseAttributes extends BaseDatabaseAttributes {
56
+ /** Engine kind discriminator. */
57
+ kind: "postgresql";
58
+ /** PostgreSQL CPU architecture. */
59
+ arch: "x86" | "arm";
60
+ }
61
+
62
+ /**
63
+ * A PostgreSQL PlanetScale database. For MySQL, use {@link MySQLDatabase}
64
+ * instead.
65
+ *
66
+ * @section Creating a PostgreSQL Database
67
+ * @example Basic PostgreSQL database
68
+ * ```typescript
69
+ * const db = yield* Planetscale.PostgresDatabase("MyDb", {
70
+ * clusterSize: "PS_10",
71
+ * });
72
+ * ```
73
+ *
74
+ * @section Migrations and seed data
75
+ * @example Apply migrations and seed files
76
+ * ```typescript
77
+ * const db = yield* Planetscale.PostgresDatabase("MyDb", {
78
+ * clusterSize: "PS_10",
79
+ * migrationsDir: "./migrations/postgres",
80
+ * importFiles: ["./seed/postgres.sql"],
81
+ * });
82
+ * ```
83
+ *
84
+ * @section Adoption
85
+ * @example Adopting an existing database
86
+ * ```typescript
87
+ * import { adopt } from "alchemy/AdoptPolicy";
88
+ *
89
+ * const db = yield* Planetscale.PostgresDatabase("Existing", {
90
+ * name: "existing-db",
91
+ * clusterSize: "PS_10",
92
+ * }).pipe(adopt());
93
+ * ```
94
+ */
95
+ export type PostgresDatabase = Resource<
96
+ "Planetscale.PostgresDatabase",
97
+ PostgresDatabaseProps,
98
+ PostgresDatabaseAttributes,
99
+ never,
100
+ Providers
101
+ >;
102
+
103
+ export const PostgresDatabase = Resource<PostgresDatabase>(
104
+ "Planetscale.PostgresDatabase",
105
+ );
106
+
107
+ const createDatabaseName = (id: string, name: string | undefined) =>
108
+ Effect.gen(function* () {
109
+ return (
110
+ name ??
111
+ (yield* createPhysicalName({ id, lowercase: true, maxLength: 63 }))
112
+ );
113
+ });
114
+
115
+ export const PostgresDatabaseProvider = () =>
116
+ Provider.effect(
117
+ PostgresDatabase,
118
+ Effect.gen(function* () {
119
+ const rootDir = yield* Effect.sync(() => process.cwd());
120
+ const createDb = yield* ops.createDatabase;
121
+ const getDb = yield* ops.getDatabase;
122
+ const updateSettings = yield* ops.updateDatabaseSettings;
123
+ const deleteDb = yield* ops.deleteDatabase;
124
+ const getBr = yield* ops.getBranch;
125
+ const createBr = yield* ops.createBranch;
126
+
127
+ return {
128
+ stables: ["id", "organization", "kind", "region"],
129
+
130
+ diff: Effect.fn(function* ({ news, olds, output }) {
131
+ if (!isResolved(news)) return undefined;
132
+
133
+ if (
134
+ news.region?.slug &&
135
+ output?.region?.slug &&
136
+ news.region.slug !== output.region.slug
137
+ ) {
138
+ return { action: "replace" } as const;
139
+ }
140
+
141
+ if (news.replicas !== olds.replicas) {
142
+ return { action: "replace" } as const;
143
+ }
144
+
145
+ const oldArch = output?.arch ?? olds.arch ?? "x86";
146
+ if (news.arch && news.arch !== oldArch) {
147
+ return { action: "replace" } as const;
148
+ }
149
+
150
+ if (news.migrationsDir) {
151
+ const newHashes = yield* hashMigrations(news.migrationsDir);
152
+ if (!recordsEqual(newHashes, output?.migrationsHashes ?? {})) {
153
+ return { action: "update" } as const;
154
+ }
155
+ if (
156
+ (news.migrationsTable ?? DEFAULT_MIGRATIONS_TABLE) !==
157
+ (output?.migrationsTable ?? DEFAULT_MIGRATIONS_TABLE)
158
+ ) {
159
+ return { action: "update" } as const;
160
+ }
161
+ }
162
+ if (news.importFiles?.length) {
163
+ const newHashes = yield* hashImports(news.importFiles, rootDir);
164
+ if (!recordsEqual(newHashes, output?.importHashes ?? {})) {
165
+ return { action: "update" } as const;
166
+ }
167
+ }
168
+
169
+ // Otherwise allow the engine to apply the default update logic.
170
+ return undefined;
171
+ }),
172
+
173
+ read: Effect.fn(function* ({ id, output, olds }) {
174
+ const { organization } = yield* Credentials;
175
+ const databaseName =
176
+ output?.name ?? (yield* createDatabaseName(id, olds?.name));
177
+
178
+ const data = yield* getDb({
179
+ organization,
180
+ database: databaseName,
181
+ }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)));
182
+
183
+ if (!data) return undefined;
184
+
185
+ if (data.kind !== "postgresql") {
186
+ return yield* Effect.fail(
187
+ new PlanetscaleConflict({
188
+ message:
189
+ `Planetscale database "${data.name}" has kind "${data.kind}" but this resource ` +
190
+ `is a PostgresDatabase. Use Planetscale.${data.kind === "mysql" ? "MySQLDatabase" : data.kind}() instead, ` +
191
+ `or delete the existing database and retry.`,
192
+ }),
193
+ );
194
+ }
195
+
196
+ const defaultBranch = data.default_branch ?? "main";
197
+
198
+ // Observe `arch` and `clusterSize` from the default branch rather
199
+ // than echoing input.
200
+ const branch = yield* getBr({
201
+ organization,
202
+ database: data.name,
203
+ branch: defaultBranch,
204
+ }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)));
205
+
206
+ const arch: "x86" | "arm" =
207
+ branch!.cluster_architecture === "aarch64" ? "arm" : "x86";
208
+ const clusterSize = branch!.cluster_name;
209
+
210
+ return {
211
+ id: data.id,
212
+ name: data.name,
213
+ organization,
214
+ state: data.state,
215
+ defaultBranch,
216
+ plan: data.plan ?? "hobby",
217
+ createdAt: data.created_at,
218
+ updatedAt: data.updated_at,
219
+ htmlUrl: data.html_url,
220
+ region: { slug: data.region.slug },
221
+ migrationsDir: output?.migrationsDir ?? olds?.migrationsDir,
222
+ migrationsTable: output?.migrationsTable ?? olds?.migrationsTable,
223
+ migrationsHashes: output?.migrationsHashes ?? {},
224
+ importHashes: output?.importHashes ?? {},
225
+ kind: "postgresql" as const,
226
+ clusterSize,
227
+ arch,
228
+ requireApprovalForDeploy: data.require_approval_for_deploy ?? false,
229
+ restrictBranchRegion: data.restrict_branch_region ?? false,
230
+ productionBranchWebConsole:
231
+ data.production_branch_web_console ?? false,
232
+ };
233
+ }),
234
+
235
+ reconcile: Effect.fn(function* ({ id, news, output, session }) {
236
+ const { organization } = yield* Credentials;
237
+ const newName = yield* createDatabaseName(id, news.name);
238
+ const clusterSize = toPostgresClusterSku({
239
+ size: news.clusterSize,
240
+ arch: news.arch,
241
+ region: news.region?.slug,
242
+ });
243
+
244
+ // Observe — read live state under either the cached name (rename
245
+ // / refresh) or the freshly-derived name (greenfield). Observing
246
+ // unconditionally absorbs the race between `read` and `reconcile`
247
+ // — if a foreign actor (or a previously-failed-to-persist
248
+ // create) produced a database under the desired name in the
249
+ // meantime, we'll find it here and skip the duplicate create.
250
+ // Adoption routing has already been gated by `read` returning
251
+ // `Unowned`, so by the time we reach reconcile any observed
252
+ // database is fair game.
253
+ const observedName = output?.name ?? newName;
254
+ let observed = yield* getDb({
255
+ organization,
256
+ database: observedName,
257
+ }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)));
258
+
259
+ // Ensure — if missing, create.
260
+ if (!observed) {
261
+ yield* session.note("Creating database...");
262
+ observed = yield* createDb({
263
+ organization,
264
+ name: newName,
265
+ region: news.region?.slug,
266
+ kind: "postgresql",
267
+ cluster_size: clusterSize,
268
+ replicas: news.replicas,
269
+ major_version: news.majorVersion,
270
+ });
271
+ }
272
+
273
+ // Wait for the database to finish provisioning before any
274
+ // downstream sync runs. PlanetScale reports `state: "pending"`
275
+ // for a while after createDatabase returns, during which branch
276
+ // operations on this database (including our own settings PATCH)
277
+ // race against the provisioning fiber.
278
+ yield* waitForDatabaseReady(organization, observed.name, session);
279
+
280
+ if (observed.kind !== "postgresql") {
281
+ return yield* Effect.fail(
282
+ new PlanetscaleConflict({
283
+ message:
284
+ `Planetscale database "${observed.name}" has kind "${observed.kind}" but this resource ` +
285
+ `is a PostgresDatabase. Use Planetscale.${observed.kind === "mysql" ? "MySQLDatabase" : observed.kind}() instead, ` +
286
+ `or delete the existing database and retry.`,
287
+ }),
288
+ );
289
+ }
290
+
291
+ // Sync — ensure a non-`main` default branch exists before
292
+ // referencing it via `default_branch`. The branch is created
293
+ // empty (no cluster size yet); we'll size it below.
294
+ if (news.defaultBranch && news.defaultBranch !== "main") {
295
+ yield* waitForDatabaseReady(organization, observed.name, session);
296
+ const branchExists = yield* getBr({
297
+ organization,
298
+ database: observed.name,
299
+ branch: news.defaultBranch,
300
+ }).pipe(
301
+ Effect.map(() => true),
302
+ Effect.catchTag("NotFound", () => Effect.succeed(false)),
303
+ );
304
+ if (!branchExists) {
305
+ yield* createBr({
306
+ organization,
307
+ database: observed.name,
308
+ name: news.defaultBranch,
309
+ parent_branch: "main",
310
+ });
311
+ }
312
+ }
313
+
314
+ // Sync settings — `updateSettings` is upsert-shaped, so we can
315
+ // call it with the full desired payload on every reconcile.
316
+ // Folds the rename in via `new_name` so we don't pay for a
317
+ // separate PATCH.
318
+ const updated = yield* updateSettings({
319
+ organization,
320
+ database: observed.name,
321
+ new_name: newName !== observed.name ? newName : undefined,
322
+ require_approval_for_deploy: news.requireApprovalForDeploy,
323
+ restrict_branch_region: news.restrictBranchRegion,
324
+ production_branch_web_console: news.productionBranchWebConsole,
325
+ default_branch: news.defaultBranch,
326
+ });
327
+
328
+ // Sync cluster size on the active default branch.
329
+ const branch = news.defaultBranch ?? updated.default_branch ?? "main";
330
+ yield* ensurePostgresProductionBranchClusterSize(
331
+ organization,
332
+ updated.name,
333
+ branch,
334
+ news.clusterSize,
335
+ );
336
+
337
+ const migrationTarget = {
338
+ organization,
339
+ database: updated.name,
340
+ branch,
341
+ };
342
+ if (news.migrationsDir || news.importFiles?.length) {
343
+ yield* waitForBranchReady(
344
+ organization,
345
+ updated.name,
346
+ branch,
347
+ session,
348
+ );
349
+ }
350
+ const migrationsTable =
351
+ news.migrationsTable ??
352
+ output?.migrationsTable ??
353
+ DEFAULT_MIGRATIONS_TABLE;
354
+ const migrationsHashes = news.migrationsDir
355
+ ? yield* runPostgresMigrations(
356
+ migrationTarget,
357
+ news.migrationsDir,
358
+ migrationsTable,
359
+ )
360
+ : (output?.migrationsHashes ?? {});
361
+ const importHashes = news.importFiles?.length
362
+ ? yield* runPostgresImports(
363
+ migrationTarget,
364
+ news.importFiles,
365
+ rootDir,
366
+ output?.importHashes ?? {},
367
+ )
368
+ : {};
369
+
370
+ return {
371
+ id: updated.id,
372
+ name: updated.name,
373
+ organization,
374
+ state: updated.state,
375
+ defaultBranch: updated.default_branch ?? branch,
376
+ plan: updated.plan ?? output?.plan ?? "hobby",
377
+ createdAt: updated.created_at,
378
+ updatedAt: updated.updated_at,
379
+ htmlUrl: updated.html_url,
380
+ region: { slug: updated.region.slug },
381
+ kind: "postgresql" as const,
382
+ clusterSize: clusterSize,
383
+ migrationsDir: news.migrationsDir,
384
+ migrationsTable: news.migrationsDir ? migrationsTable : undefined,
385
+ migrationsHashes,
386
+ importHashes,
387
+ arch: news.arch ?? output?.arch ?? "x86",
388
+ requireApprovalForDeploy:
389
+ updated.require_approval_for_deploy ?? false,
390
+ restrictBranchRegion: updated.restrict_branch_region ?? false,
391
+ productionBranchWebConsole:
392
+ updated.production_branch_web_console ?? false,
393
+ } satisfies PostgresDatabaseAttributes;
394
+ }),
395
+
396
+ delete: Effect.fn(function* ({ output }) {
397
+ yield* deleteDb({
398
+ organization: output.organization,
399
+ database: output.name,
400
+ }).pipe(Effect.catchTag("NotFound", () => Effect.void));
401
+ }),
402
+ };
403
+ }),
404
+ );