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.
- package/bin/exec.js +2 -9
- package/bin/exec.js.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmContributors.d.ts +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmContributors.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmHistory.d.ts +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmHistory.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarms.d.ts +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarms.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmsForMetric.d.ts +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmsForMetric.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAnomalyDetectors.d.ts +1 -1
- package/lib/AWS/CloudWatch/DescribeAnomalyDetectors.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeInsightRules.d.ts +1 -1
- package/lib/AWS/CloudWatch/DescribeInsightRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DisableAlarmActions.d.ts +1 -1
- package/lib/AWS/CloudWatch/DisableAlarmActions.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DisableInsightRules.d.ts +1 -1
- package/lib/AWS/CloudWatch/DisableInsightRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/EnableAlarmActions.d.ts +1 -1
- package/lib/AWS/CloudWatch/EnableAlarmActions.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetAlarmMuteRule.d.ts +1 -1
- package/lib/AWS/CloudWatch/GetAlarmMuteRule.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetDashboard.d.ts +1 -1
- package/lib/AWS/CloudWatch/GetDashboard.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetInsightRuleReport.d.ts +1 -1
- package/lib/AWS/CloudWatch/GetInsightRuleReport.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricData.d.ts +1 -1
- package/lib/AWS/CloudWatch/GetMetricData.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricStatistics.d.ts +1 -1
- package/lib/AWS/CloudWatch/GetMetricStatistics.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricStream.d.ts +1 -1
- package/lib/AWS/CloudWatch/GetMetricStream.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricWidgetImage.d.ts +1 -1
- package/lib/AWS/CloudWatch/GetMetricWidgetImage.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListAlarmMuteRules.d.ts +1 -1
- package/lib/AWS/CloudWatch/ListAlarmMuteRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListDashboards.d.ts +1 -1
- package/lib/AWS/CloudWatch/ListDashboards.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListManagedInsightRules.d.ts +1 -1
- package/lib/AWS/CloudWatch/ListManagedInsightRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListMetricStreams.d.ts +1 -1
- package/lib/AWS/CloudWatch/ListMetricStreams.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListMetrics.d.ts +1 -1
- package/lib/AWS/CloudWatch/ListMetrics.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListTagsForResource.d.ts +1 -1
- package/lib/AWS/CloudWatch/ListTagsForResource.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/PutMetricData.d.ts +1 -1
- package/lib/AWS/CloudWatch/PutMetricData.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/SetAlarmState.d.ts +1 -1
- package/lib/AWS/CloudWatch/SetAlarmState.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/BatchExecuteStatement.d.ts +1 -1
- package/lib/AWS/DynamoDB/BatchExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/BatchGetItem.d.ts +1 -1
- package/lib/AWS/DynamoDB/BatchGetItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/BatchWriteItem.d.ts +1 -1
- package/lib/AWS/DynamoDB/BatchWriteItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/DeleteItem.d.ts +1 -1
- package/lib/AWS/DynamoDB/DeleteItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/DescribeTable.d.ts +1 -1
- package/lib/AWS/DynamoDB/DescribeTable.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/DescribeTimeToLive.d.ts +1 -1
- package/lib/AWS/DynamoDB/DescribeTimeToLive.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ExecuteStatement.d.ts +1 -1
- package/lib/AWS/DynamoDB/ExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ExecuteTransaction.d.ts +1 -1
- package/lib/AWS/DynamoDB/ExecuteTransaction.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/GetItem.d.ts +1 -1
- package/lib/AWS/DynamoDB/GetItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ListTables.d.ts +1 -1
- package/lib/AWS/DynamoDB/ListTables.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ListTagsOfResource.d.ts +1 -1
- package/lib/AWS/DynamoDB/ListTagsOfResource.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/PutItem.d.ts +1 -1
- package/lib/AWS/DynamoDB/PutItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Query.d.ts +1 -1
- package/lib/AWS/DynamoDB/Query.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/RestoreTableToPointInTime.d.ts +1 -1
- package/lib/AWS/DynamoDB/RestoreTableToPointInTime.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Scan.d.ts +1 -1
- package/lib/AWS/DynamoDB/Scan.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/TransactGetItems.d.ts +1 -1
- package/lib/AWS/DynamoDB/TransactGetItems.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/TransactWriteItems.d.ts +1 -1
- package/lib/AWS/DynamoDB/TransactWriteItems.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/UpdateItem.d.ts +1 -1
- package/lib/AWS/DynamoDB/UpdateItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/UpdateTimeToLive.d.ts +1 -1
- package/lib/AWS/DynamoDB/UpdateTimeToLive.d.ts.map +1 -1
- package/lib/AWS/ECS/DescribeTasks.d.ts +1 -1
- package/lib/AWS/ECS/DescribeTasks.d.ts.map +1 -1
- package/lib/AWS/ECS/ListTasks.d.ts +1 -1
- package/lib/AWS/ECS/ListTasks.d.ts.map +1 -1
- package/lib/AWS/ECS/RunTask.d.ts +1 -1
- package/lib/AWS/ECS/RunTask.d.ts.map +1 -1
- package/lib/AWS/ECS/StopTask.d.ts +1 -1
- package/lib/AWS/ECS/StopTask.d.ts.map +1 -1
- package/lib/AWS/EventBridge/DescribeEventBus.d.ts +1 -1
- package/lib/AWS/EventBridge/DescribeEventBus.d.ts.map +1 -1
- package/lib/AWS/EventBridge/DescribeRule.d.ts +1 -1
- package/lib/AWS/EventBridge/DescribeRule.d.ts.map +1 -1
- package/lib/AWS/EventBridge/EventSource.d.ts +2 -2
- package/lib/AWS/EventBridge/ListEventBuses.d.ts +1 -1
- package/lib/AWS/EventBridge/ListEventBuses.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ListRules.d.ts +1 -1
- package/lib/AWS/EventBridge/ListRules.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ListTargetsByRule.d.ts +1 -1
- package/lib/AWS/EventBridge/ListTargetsByRule.d.ts.map +1 -1
- package/lib/AWS/EventBridge/PutEvents.d.ts +1 -1
- package/lib/AWS/EventBridge/PutEvents.d.ts.map +1 -1
- package/lib/AWS/EventBridge/TestEventPattern.d.ts +1 -1
- package/lib/AWS/EventBridge/TestEventPattern.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ToLambda.d.ts +1 -1
- package/lib/AWS/EventBridge/ToLambda.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ToQueue.d.ts +1 -1
- package/lib/AWS/EventBridge/ToQueue.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeAccountSettings.d.ts +1 -1
- package/lib/AWS/Kinesis/DescribeAccountSettings.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeLimits.d.ts +1 -1
- package/lib/AWS/Kinesis/DescribeLimits.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeStream.d.ts +1 -1
- package/lib/AWS/Kinesis/DescribeStream.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeStreamConsumer.d.ts +1 -1
- package/lib/AWS/Kinesis/DescribeStreamConsumer.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeStreamSummary.d.ts +1 -1
- package/lib/AWS/Kinesis/DescribeStreamSummary.d.ts.map +1 -1
- package/lib/AWS/Kinesis/GetRecords.d.ts +1 -1
- package/lib/AWS/Kinesis/GetRecords.d.ts.map +1 -1
- package/lib/AWS/Kinesis/GetResourcePolicy.d.ts +1 -1
- package/lib/AWS/Kinesis/GetResourcePolicy.d.ts.map +1 -1
- package/lib/AWS/Kinesis/GetShardIterator.d.ts +1 -1
- package/lib/AWS/Kinesis/GetShardIterator.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListShards.d.ts +1 -1
- package/lib/AWS/Kinesis/ListShards.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListStreamConsumers.d.ts +1 -1
- package/lib/AWS/Kinesis/ListStreamConsumers.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListStreams.d.ts +1 -1
- package/lib/AWS/Kinesis/ListStreams.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListTagsForResource.d.ts +1 -1
- package/lib/AWS/Kinesis/ListTagsForResource.d.ts.map +1 -1
- package/lib/AWS/Kinesis/PutRecord.d.ts +1 -1
- package/lib/AWS/Kinesis/PutRecord.d.ts.map +1 -1
- package/lib/AWS/Kinesis/PutRecords.d.ts +1 -1
- package/lib/AWS/Kinesis/PutRecords.d.ts.map +1 -1
- package/lib/AWS/Kinesis/StreamSink.d.ts +1 -1
- package/lib/AWS/Kinesis/StreamSink.d.ts.map +1 -1
- package/lib/AWS/Kinesis/SubscribeToShard.d.ts +1 -1
- package/lib/AWS/Kinesis/SubscribeToShard.d.ts.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts +2 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +2 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/InvokeFunction.d.ts +1 -1
- package/lib/AWS/Lambda/InvokeFunction.d.ts.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts +2 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts +2 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts +2 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts +2 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts.map +1 -1
- package/lib/AWS/RDS/Connect.d.ts +1 -1
- package/lib/AWS/RDS/Connect.d.ts.map +1 -1
- package/lib/AWS/RDSData/BatchExecuteStatement.d.ts +1 -1
- package/lib/AWS/RDSData/BatchExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/RDSData/BeginTransaction.d.ts +1 -1
- package/lib/AWS/RDSData/BeginTransaction.d.ts.map +1 -1
- package/lib/AWS/RDSData/CommitTransaction.d.ts +1 -1
- package/lib/AWS/RDSData/CommitTransaction.d.ts.map +1 -1
- package/lib/AWS/RDSData/ExecuteSql.d.ts +1 -1
- package/lib/AWS/RDSData/ExecuteSql.d.ts.map +1 -1
- package/lib/AWS/RDSData/ExecuteStatement.d.ts +1 -1
- package/lib/AWS/RDSData/ExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/RDSData/RollbackTransaction.d.ts +1 -1
- package/lib/AWS/RDSData/RollbackTransaction.d.ts.map +1 -1
- package/lib/AWS/S3/AbortMultipartUpload.d.ts +1 -1
- package/lib/AWS/S3/AbortMultipartUpload.d.ts.map +1 -1
- package/lib/AWS/S3/CompleteMultipartUpload.d.ts +1 -1
- package/lib/AWS/S3/CompleteMultipartUpload.d.ts.map +1 -1
- package/lib/AWS/S3/CopyObject.d.ts +1 -1
- package/lib/AWS/S3/CopyObject.d.ts.map +1 -1
- package/lib/AWS/S3/CreateMultipartUpload.d.ts +1 -1
- package/lib/AWS/S3/CreateMultipartUpload.d.ts.map +1 -1
- package/lib/AWS/S3/DeleteObject.d.ts +1 -1
- package/lib/AWS/S3/DeleteObject.d.ts.map +1 -1
- package/lib/AWS/S3/GetObject.d.ts +1 -1
- package/lib/AWS/S3/GetObject.d.ts.map +1 -1
- package/lib/AWS/S3/HeadObject.d.ts +1 -1
- package/lib/AWS/S3/HeadObject.d.ts.map +1 -1
- package/lib/AWS/S3/ListObjectsV2.d.ts +1 -1
- package/lib/AWS/S3/ListObjectsV2.d.ts.map +1 -1
- package/lib/AWS/S3/PutObject.d.ts +1 -1
- package/lib/AWS/S3/PutObject.d.ts.map +1 -1
- package/lib/AWS/S3/UploadPart.d.ts +1 -1
- package/lib/AWS/S3/UploadPart.d.ts.map +1 -1
- package/lib/AWS/SNS/AddPermission.d.ts +1 -1
- package/lib/AWS/SNS/AddPermission.d.ts.map +1 -1
- package/lib/AWS/SNS/ConfirmSubscription.d.ts +1 -1
- package/lib/AWS/SNS/ConfirmSubscription.d.ts.map +1 -1
- package/lib/AWS/SNS/GetDataProtectionPolicy.d.ts +1 -1
- package/lib/AWS/SNS/GetDataProtectionPolicy.d.ts.map +1 -1
- package/lib/AWS/SNS/GetSubscriptionAttributes.d.ts +1 -1
- package/lib/AWS/SNS/GetSubscriptionAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/GetTopicAttributes.d.ts +1 -1
- package/lib/AWS/SNS/GetTopicAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/ListSubscriptions.d.ts +1 -1
- package/lib/AWS/SNS/ListSubscriptions.d.ts.map +1 -1
- package/lib/AWS/SNS/ListSubscriptionsByTopic.d.ts +1 -1
- package/lib/AWS/SNS/ListSubscriptionsByTopic.d.ts.map +1 -1
- package/lib/AWS/SNS/ListTagsForResource.d.ts +1 -1
- package/lib/AWS/SNS/ListTagsForResource.d.ts.map +1 -1
- package/lib/AWS/SNS/ListTopics.d.ts +1 -1
- package/lib/AWS/SNS/ListTopics.d.ts.map +1 -1
- package/lib/AWS/SNS/Publish.d.ts +1 -1
- package/lib/AWS/SNS/Publish.d.ts.map +1 -1
- package/lib/AWS/SNS/PublishBatch.d.ts +1 -1
- package/lib/AWS/SNS/PublishBatch.d.ts.map +1 -1
- package/lib/AWS/SNS/PutDataProtectionPolicy.d.ts +1 -1
- package/lib/AWS/SNS/PutDataProtectionPolicy.d.ts.map +1 -1
- package/lib/AWS/SNS/RemovePermission.d.ts +1 -1
- package/lib/AWS/SNS/RemovePermission.d.ts.map +1 -1
- package/lib/AWS/SNS/SetSubscriptionAttributes.d.ts +1 -1
- package/lib/AWS/SNS/SetSubscriptionAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/SetTopicAttributes.d.ts +1 -1
- package/lib/AWS/SNS/SetTopicAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/TagResource.d.ts +1 -1
- package/lib/AWS/SNS/TagResource.d.ts.map +1 -1
- package/lib/AWS/SNS/TopicSink.d.ts +1 -1
- package/lib/AWS/SNS/TopicSink.d.ts.map +1 -1
- package/lib/AWS/SNS/UntagResource.d.ts +1 -1
- package/lib/AWS/SNS/UntagResource.d.ts.map +1 -1
- package/lib/AWS/SQS/DeleteMessage.d.ts +1 -1
- package/lib/AWS/SQS/DeleteMessage.d.ts.map +1 -1
- package/lib/AWS/SQS/DeleteMessageBatch.d.ts +1 -1
- package/lib/AWS/SQS/DeleteMessageBatch.d.ts.map +1 -1
- package/lib/AWS/SQS/QueueSink.d.ts +1 -1
- package/lib/AWS/SQS/QueueSink.d.ts.map +1 -1
- package/lib/AWS/SQS/ReceiveMessage.d.ts +1 -1
- package/lib/AWS/SQS/ReceiveMessage.d.ts.map +1 -1
- package/lib/AWS/SQS/SendMessage.d.ts +1 -1
- package/lib/AWS/SQS/SendMessage.d.ts.map +1 -1
- package/lib/AWS/SQS/SendMessageBatch.d.ts +1 -1
- package/lib/AWS/SQS/SendMessageBatch.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/DescribeSecret.d.ts +1 -1
- package/lib/AWS/SecretsManager/DescribeSecret.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/GetRandomPassword.d.ts +1 -1
- package/lib/AWS/SecretsManager/GetRandomPassword.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/GetSecretValue.d.ts +1 -1
- package/lib/AWS/SecretsManager/GetSecretValue.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/ListSecrets.d.ts +1 -1
- package/lib/AWS/SecretsManager/ListSecrets.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/PutSecretValue.d.ts +1 -1
- package/lib/AWS/SecretsManager/PutSecretValue.d.ts.map +1 -1
- package/lib/Binding.d.ts +1 -1
- package/lib/Binding.d.ts.map +1 -1
- package/lib/Bundle/Docker.d.ts.map +1 -1
- package/lib/Bundle/Docker.js +12 -13
- package/lib/Bundle/Docker.js.map +1 -1
- package/lib/Cli/commands/deploy.d.ts.map +1 -1
- package/lib/Cli/commands/deploy.js +1 -0
- package/lib/Cli/commands/deploy.js.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts +8 -7
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.js +2 -6
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.js.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts +4 -3
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +2 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts +8 -7
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js +2 -2
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
- package/lib/Cloudflare/D1/D1Connection.d.ts +12 -10
- package/lib/Cloudflare/D1/D1Connection.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1Connection.js +2 -2
- package/lib/Cloudflare/D1/D1Connection.js.map +1 -1
- package/lib/Cloudflare/D1/D1Database.js +1 -1
- package/lib/Cloudflare/D1/D1Database.js.map +1 -1
- package/lib/Cloudflare/D1/D1Migrations.d.ts +2 -2
- package/lib/Cloudflare/D1/D1Migrations.d.ts.map +1 -1
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts +5 -4
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Email/SendEmailBinding.js +2 -1
- package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -1
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts +10 -8
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js +2 -2
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js.map +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.d.ts +5 -4
- package/lib/Cloudflare/Images/ImagesBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.js +4 -2
- package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.d.ts +33 -32
- package/lib/Cloudflare/KV/KVNamespaceBinding.d.ts.map +1 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.js +5 -2
- package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.d.ts +5 -4
- package/lib/Cloudflare/Queue/QueueBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.js +2 -2
- package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts +1 -2
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/R2/R2BucketBinding.d.ts +13 -12
- package/lib/Cloudflare/R2/R2BucketBinding.d.ts.map +1 -1
- package/lib/Cloudflare/R2/R2BucketBinding.js +2 -2
- package/lib/Cloudflare/R2/R2BucketBinding.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts +5 -4
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js +2 -2
- package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
- package/lib/Cloudflare/Workers/CronEventSource.d.ts +1 -2
- package/lib/Cloudflare/Workers/CronEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js +6 -3
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.js +3 -3
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.js.map +1 -1
- package/lib/Cloudflare/Workers/Fetch.d.ts +1 -1
- package/lib/Cloudflare/Workers/Fetch.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/RpcAsync.d.ts +55 -0
- package/lib/Cloudflare/Workers/RpcAsync.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/RpcAsync.js +55 -0
- package/lib/Cloudflare/Workers/RpcAsync.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +3 -3
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +9 -2
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +2 -0
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.d.ts +4 -4
- package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +6 -3
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Neon/Branch.js +1 -1
- package/lib/Neon/Branch.js.map +1 -1
- package/lib/Neon/Migrations.d.ts +1 -1
- package/lib/Neon/Migrations.d.ts.map +1 -1
- package/lib/Neon/Project.d.ts.map +1 -1
- package/lib/Neon/Project.js +1 -15
- package/lib/Neon/Project.js.map +1 -1
- package/lib/Phase.d.ts +2 -2
- package/lib/Phase.d.ts.map +1 -1
- package/lib/Phase.js +2 -1
- package/lib/Phase.js.map +1 -1
- package/lib/Planetscale/AuthProvider.d.ts +59 -0
- package/lib/Planetscale/AuthProvider.d.ts.map +1 -0
- package/lib/Planetscale/AuthProvider.js +131 -0
- package/lib/Planetscale/AuthProvider.js.map +1 -0
- package/lib/Planetscale/Branch.d.ts +113 -0
- package/lib/Planetscale/Branch.d.ts.map +1 -0
- package/lib/Planetscale/Branch.js +287 -0
- package/lib/Planetscale/Branch.js.map +1 -0
- package/lib/Planetscale/Credentials.d.ts +35 -0
- package/lib/Planetscale/Credentials.d.ts.map +1 -0
- package/lib/Planetscale/Credentials.js +56 -0
- package/lib/Planetscale/Credentials.js.map +1 -0
- package/lib/Planetscale/Database.d.ts +117 -0
- package/lib/Planetscale/Database.d.ts.map +1 -0
- package/lib/Planetscale/Database.js +1 -0
- package/lib/Planetscale/Database.js.map +1 -0
- package/lib/Planetscale/MySQL/MySQLBranch.d.ts +86 -0
- package/lib/Planetscale/MySQL/MySQLBranch.d.ts.map +1 -0
- package/lib/Planetscale/MySQL/MySQLBranch.js +14 -0
- package/lib/Planetscale/MySQL/MySQLBranch.js.map +1 -0
- package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts +23 -0
- package/lib/Planetscale/MySQL/MySQLClusterSize.d.ts.map +1 -0
- package/lib/Planetscale/MySQL/MySQLClusterSize.js +44 -0
- package/lib/Planetscale/MySQL/MySQLClusterSize.js.map +1 -0
- package/lib/Planetscale/MySQL/MySQLDatabase.d.ts +119 -0
- package/lib/Planetscale/MySQL/MySQLDatabase.d.ts.map +1 -0
- package/lib/Planetscale/MySQL/MySQLDatabase.js +237 -0
- package/lib/Planetscale/MySQL/MySQLDatabase.js.map +1 -0
- package/lib/Planetscale/MySQL/MySQLMigrations.d.ts +18 -0
- package/lib/Planetscale/MySQL/MySQLMigrations.d.ts.map +1 -0
- package/lib/Planetscale/MySQL/MySQLMigrations.js +157 -0
- package/lib/Planetscale/MySQL/MySQLMigrations.js.map +1 -0
- package/lib/Planetscale/MySQL/MySQLOrigin.d.ts +15 -0
- package/lib/Planetscale/MySQL/MySQLOrigin.d.ts.map +1 -0
- package/lib/Planetscale/MySQL/MySQLOrigin.js +2 -0
- package/lib/Planetscale/MySQL/MySQLOrigin.js.map +1 -0
- package/lib/Planetscale/MySQL/MySQLPassword.d.ts +115 -0
- package/lib/Planetscale/MySQL/MySQLPassword.d.ts.map +1 -0
- package/lib/Planetscale/MySQL/MySQLPassword.js +197 -0
- package/lib/Planetscale/MySQL/MySQLPassword.js.map +1 -0
- package/lib/Planetscale/MySQL/index.d.ts +6 -0
- package/lib/Planetscale/MySQL/index.d.ts.map +1 -0
- package/lib/Planetscale/MySQL/index.js +6 -0
- package/lib/Planetscale/MySQL/index.js.map +1 -0
- package/lib/Planetscale/Postgres/PostgresBranch.d.ts +67 -0
- package/lib/Planetscale/Postgres/PostgresBranch.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/PostgresBranch.js +14 -0
- package/lib/Planetscale/Postgres/PostgresBranch.js.map +1 -0
- package/lib/Planetscale/Postgres/PostgresClusterSize.d.ts +44 -0
- package/lib/Planetscale/Postgres/PostgresClusterSize.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/PostgresClusterSize.js +72 -0
- package/lib/Planetscale/Postgres/PostgresClusterSize.js.map +1 -0
- package/lib/Planetscale/Postgres/PostgresDatabase.d.ts +73 -0
- package/lib/Planetscale/Postgres/PostgresDatabase.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/PostgresDatabase.js +241 -0
- package/lib/Planetscale/Postgres/PostgresDatabase.js.map +1 -0
- package/lib/Planetscale/Postgres/PostgresDefaultRole.d.ts +85 -0
- package/lib/Planetscale/Postgres/PostgresDefaultRole.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/PostgresDefaultRole.js +142 -0
- package/lib/Planetscale/Postgres/PostgresDefaultRole.js.map +1 -0
- package/lib/Planetscale/Postgres/PostgresMigrations.d.ts +18 -0
- package/lib/Planetscale/Postgres/PostgresMigrations.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/PostgresMigrations.js +148 -0
- package/lib/Planetscale/Postgres/PostgresMigrations.js.map +1 -0
- package/lib/Planetscale/Postgres/PostgresOrigin.d.ts +15 -0
- package/lib/Planetscale/Postgres/PostgresOrigin.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/PostgresOrigin.js +2 -0
- package/lib/Planetscale/Postgres/PostgresOrigin.js.map +1 -0
- package/lib/Planetscale/Postgres/PostgresRole.d.ts +121 -0
- package/lib/Planetscale/Postgres/PostgresRole.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/PostgresRole.js +228 -0
- package/lib/Planetscale/Postgres/PostgresRole.js.map +1 -0
- package/lib/Planetscale/Postgres/index.d.ts +7 -0
- package/lib/Planetscale/Postgres/index.d.ts.map +1 -0
- package/lib/Planetscale/Postgres/index.js +7 -0
- package/lib/Planetscale/Postgres/index.js.map +1 -0
- package/lib/Planetscale/Providers.d.ts +25 -0
- package/lib/Planetscale/Providers.d.ts.map +1 -0
- package/lib/Planetscale/Providers.js +40 -0
- package/lib/Planetscale/Providers.js.map +1 -0
- package/lib/Planetscale/Util.d.ts +182 -0
- package/lib/Planetscale/Util.d.ts.map +1 -0
- package/lib/Planetscale/Util.js +98 -0
- package/lib/Planetscale/Util.js.map +1 -0
- package/lib/Planetscale/index.d.ts +9 -0
- package/lib/Planetscale/index.d.ts.map +1 -0
- package/lib/Planetscale/index.js +9 -0
- package/lib/Planetscale/index.js.map +1 -0
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +7 -2
- package/lib/Platform.js.map +1 -1
- package/lib/RuntimeContext.d.ts +7 -3
- package/lib/RuntimeContext.d.ts.map +1 -1
- package/lib/RuntimeContext.js +3 -2
- package/lib/RuntimeContext.js.map +1 -1
- package/lib/Server/S3BucketEventSource.d.ts +1 -1
- package/lib/Server/S3BucketEventSource.d.ts.map +1 -1
- package/lib/{Neon → Sql}/SqlFile.d.ts +2 -0
- package/lib/Sql/SqlFile.d.ts.map +1 -0
- package/lib/{Neon → Sql}/SqlFile.js +14 -0
- package/lib/Sql/SqlFile.js.map +1 -0
- package/lib/Sql/index.d.ts +2 -0
- package/lib/Sql/index.d.ts.map +1 -0
- package/lib/Sql/index.js +2 -0
- package/lib/Sql/index.js.map +1 -0
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +20 -6
- package/src/Binding.ts +1 -1
- package/src/Bundle/Docker.ts +12 -15
- package/src/Cli/commands/deploy.ts +1 -0
- package/src/Cloudflare/AiGateway/AiGatewayBinding.ts +11 -16
- package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +7 -9
- package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +11 -22
- package/src/Cloudflare/D1/D1Connection.ts +31 -18
- package/src/Cloudflare/D1/D1Database.ts +1 -1
- package/src/Cloudflare/D1/D1Migrations.ts +2 -2
- package/src/Cloudflare/Email/SendEmailBinding.ts +7 -5
- package/src/Cloudflare/Hyperdrive/HyperdriveBinding.ts +16 -12
- package/src/Cloudflare/Images/ImagesBinding.ts +8 -8
- package/src/Cloudflare/KV/KVNamespaceBinding.ts +38 -38
- package/src/Cloudflare/Queue/QueueBinding.ts +7 -6
- package/src/Cloudflare/R2/R2BucketBinding.ts +16 -19
- package/src/Cloudflare/SecretsStore/SecretBinding.ts +11 -13
- package/src/Cloudflare/Workers/DurableObjectNamespace.ts +6 -6
- package/src/Cloudflare/Workers/DynamicWorkerLoader.ts +4 -5
- package/src/Cloudflare/Workers/RpcAsync.ts +55 -0
- package/src/Cloudflare/Workers/Worker.ts +17 -5
- package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +2 -0
- package/src/Cloudflare/Workers/Workflow.ts +10 -11
- package/src/Neon/Branch.ts +1 -1
- package/src/Neon/Migrations.ts +1 -1
- package/src/Neon/Project.ts +6 -20
- package/src/Phase.ts +2 -0
- package/src/Planetscale/AuthProvider.ts +285 -0
- package/src/Planetscale/Branch.ts +508 -0
- package/src/Planetscale/Credentials.ts +96 -0
- package/src/Planetscale/Database.ts +129 -0
- package/src/Planetscale/MySQL/MySQLBranch.ts +112 -0
- package/src/Planetscale/MySQL/MySQLClusterSize.ts +102 -0
- package/src/Planetscale/MySQL/MySQLDatabase.ts +446 -0
- package/src/Planetscale/MySQL/MySQLMigrations.ts +271 -0
- package/src/Planetscale/MySQL/MySQLOrigin.ts +15 -0
- package/src/Planetscale/MySQL/MySQLPassword.ts +387 -0
- package/src/Planetscale/MySQL/index.ts +5 -0
- package/src/Planetscale/Postgres/PostgresBranch.ts +97 -0
- package/src/Planetscale/Postgres/PostgresClusterSize.ts +125 -0
- package/src/Planetscale/Postgres/PostgresDatabase.ts +404 -0
- package/src/Planetscale/Postgres/PostgresDefaultRole.ts +270 -0
- package/src/Planetscale/Postgres/PostgresMigrations.ts +256 -0
- package/src/Planetscale/Postgres/PostgresOrigin.ts +15 -0
- package/src/Planetscale/Postgres/PostgresRole.ts +469 -0
- package/src/Planetscale/Postgres/index.ts +6 -0
- package/src/Planetscale/Providers.ts +80 -0
- package/src/Planetscale/Util.ts +160 -0
- package/src/Planetscale/index.ts +18 -0
- package/src/Platform.ts +13 -1
- package/src/RuntimeContext.ts +7 -8
- package/src/{Neon → Sql}/SqlFile.ts +22 -0
- package/src/Sql/index.ts +1 -0
- package/lib/Cloudflare/D1/D1SqlFile.d.ts +0 -20
- package/lib/Cloudflare/D1/D1SqlFile.d.ts.map +0 -1
- package/lib/Cloudflare/D1/D1SqlFile.js +0 -46
- package/lib/Cloudflare/D1/D1SqlFile.js.map +0 -1
- package/lib/Neon/SqlFile.d.ts.map +0 -1
- package/lib/Neon/SqlFile.js.map +0 -1
- 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
|
+
);
|