@effect/cluster 0.0.0-snapshot-d33d8b050b8e3c87dcde9587083e6c1cf733f72b
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/AtLeastOnce/package.json +6 -0
- package/AtLeastOnceStorage/package.json +6 -0
- package/Broadcaster/package.json +6 -0
- package/LICENSE +21 -0
- package/ManagerConfig/package.json +6 -0
- package/Message/package.json +6 -0
- package/MessageState/package.json +6 -0
- package/Messenger/package.json +6 -0
- package/Pod/package.json +6 -0
- package/PodAddress/package.json +6 -0
- package/Pods/package.json +6 -0
- package/PodsHealth/package.json +6 -0
- package/PoisonPill/package.json +6 -0
- package/README.md +3 -0
- package/RecipientAddress/package.json +6 -0
- package/RecipientBehaviour/package.json +6 -0
- package/RecipientBehaviourContext/package.json +6 -0
- package/RecipientType/package.json +6 -0
- package/Serialization/package.json +6 -0
- package/SerializedEnvelope/package.json +6 -0
- package/SerializedMessage/package.json +6 -0
- package/ShardId/package.json +6 -0
- package/ShardManager/package.json +6 -0
- package/ShardManagerClient/package.json +6 -0
- package/Sharding/package.json +6 -0
- package/ShardingConfig/package.json +6 -0
- package/ShardingEvent/package.json +6 -0
- package/ShardingException/package.json +6 -0
- package/ShardingRegistrationEvent/package.json +6 -0
- package/Storage/package.json +6 -0
- package/dist/cjs/AtLeastOnce.js +43 -0
- package/dist/cjs/AtLeastOnce.js.map +1 -0
- package/dist/cjs/AtLeastOnceStorage.js +48 -0
- package/dist/cjs/AtLeastOnceStorage.js.map +1 -0
- package/dist/cjs/Broadcaster.js +6 -0
- package/dist/cjs/Broadcaster.js.map +1 -0
- package/dist/cjs/ManagerConfig.js +57 -0
- package/dist/cjs/ManagerConfig.js.map +1 -0
- package/dist/cjs/Message.js +64 -0
- package/dist/cjs/Message.js.map +1 -0
- package/dist/cjs/MessageState.js +78 -0
- package/dist/cjs/MessageState.js.map +1 -0
- package/dist/cjs/Messenger.js +6 -0
- package/dist/cjs/Messenger.js.map +1 -0
- package/dist/cjs/Pod.js +101 -0
- package/dist/cjs/Pod.js.map +1 -0
- package/dist/cjs/PodAddress.js +100 -0
- package/dist/cjs/PodAddress.js.map +1 -0
- package/dist/cjs/Pods.js +58 -0
- package/dist/cjs/Pods.js.map +1 -0
- package/dist/cjs/PodsHealth.js +64 -0
- package/dist/cjs/PodsHealth.js.map +1 -0
- package/dist/cjs/PoisonPill.js +101 -0
- package/dist/cjs/PoisonPill.js.map +1 -0
- package/dist/cjs/RecipientAddress.js +102 -0
- package/dist/cjs/RecipientAddress.js.map +1 -0
- package/dist/cjs/RecipientBehaviour.js +61 -0
- package/dist/cjs/RecipientBehaviour.js.map +1 -0
- package/dist/cjs/RecipientBehaviourContext.js +87 -0
- package/dist/cjs/RecipientBehaviourContext.js.map +1 -0
- package/dist/cjs/RecipientType.js +142 -0
- package/dist/cjs/RecipientType.js.map +1 -0
- package/dist/cjs/Serialization.js +55 -0
- package/dist/cjs/Serialization.js.map +1 -0
- package/dist/cjs/SerializedEnvelope.js +111 -0
- package/dist/cjs/SerializedEnvelope.js.map +1 -0
- package/dist/cjs/SerializedMessage.js +87 -0
- package/dist/cjs/SerializedMessage.js.map +1 -0
- package/dist/cjs/ShardId.js +89 -0
- package/dist/cjs/ShardId.js.map +1 -0
- package/dist/cjs/ShardManager.js +48 -0
- package/dist/cjs/ShardManager.js.map +1 -0
- package/dist/cjs/ShardManagerClient.js +53 -0
- package/dist/cjs/ShardManagerClient.js.map +1 -0
- package/dist/cjs/Sharding.js +129 -0
- package/dist/cjs/Sharding.js.map +1 -0
- package/dist/cjs/ShardingConfig.js +64 -0
- package/dist/cjs/ShardingConfig.js.map +1 -0
- package/dist/cjs/ShardingEvent.js +72 -0
- package/dist/cjs/ShardingEvent.js.map +1 -0
- package/dist/cjs/ShardingException.js +130 -0
- package/dist/cjs/ShardingException.js.map +1 -0
- package/dist/cjs/ShardingRegistrationEvent.js +44 -0
- package/dist/cjs/ShardingRegistrationEvent.js.map +1 -0
- package/dist/cjs/Storage.js +63 -0
- package/dist/cjs/Storage.js.map +1 -0
- package/dist/cjs/index.js +88 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/internal/atLeastOnce.js +58 -0
- package/dist/cjs/internal/atLeastOnce.js.map +1 -0
- package/dist/cjs/internal/atLeastOnceStorage.js +186 -0
- package/dist/cjs/internal/atLeastOnceStorage.js.map +1 -0
- package/dist/cjs/internal/entityManager.js +191 -0
- package/dist/cjs/internal/entityManager.js.map +1 -0
- package/dist/cjs/internal/entityState.js +70 -0
- package/dist/cjs/internal/entityState.js.map +1 -0
- package/dist/cjs/internal/managerConfig.js +69 -0
- package/dist/cjs/internal/managerConfig.js.map +1 -0
- package/dist/cjs/internal/message.js +68 -0
- package/dist/cjs/internal/message.js.map +1 -0
- package/dist/cjs/internal/messageState.js +102 -0
- package/dist/cjs/internal/messageState.js.map +1 -0
- package/dist/cjs/internal/podWithMetadata.js +77 -0
- package/dist/cjs/internal/podWithMetadata.js.map +1 -0
- package/dist/cjs/internal/pods.js +58 -0
- package/dist/cjs/internal/pods.js.map +1 -0
- package/dist/cjs/internal/podsHealth.js +63 -0
- package/dist/cjs/internal/podsHealth.js.map +1 -0
- package/dist/cjs/internal/recipientBehaviour.js +75 -0
- package/dist/cjs/internal/recipientBehaviour.js.map +1 -0
- package/dist/cjs/internal/recipientBehaviourContext.js +59 -0
- package/dist/cjs/internal/recipientBehaviourContext.js.map +1 -0
- package/dist/cjs/internal/serialization.js +72 -0
- package/dist/cjs/internal/serialization.js.map +1 -0
- package/dist/cjs/internal/shardManager.js +291 -0
- package/dist/cjs/internal/shardManager.js.map +1 -0
- package/dist/cjs/internal/shardManagerClient.js +71 -0
- package/dist/cjs/internal/shardManagerClient.js.map +1 -0
- package/dist/cjs/internal/shardManagerState.js +67 -0
- package/dist/cjs/internal/shardManagerState.js.map +1 -0
- package/dist/cjs/internal/sharding.js +329 -0
- package/dist/cjs/internal/sharding.js.map +1 -0
- package/dist/cjs/internal/shardingConfig.js +79 -0
- package/dist/cjs/internal/shardingConfig.js.map +1 -0
- package/dist/cjs/internal/storage.js +75 -0
- package/dist/cjs/internal/storage.js.map +1 -0
- package/dist/cjs/internal/utils.js +92 -0
- package/dist/cjs/internal/utils.js.map +1 -0
- package/dist/dts/AtLeastOnce.d.ts +20 -0
- package/dist/dts/AtLeastOnce.d.ts.map +1 -0
- package/dist/dts/AtLeastOnceStorage.d.ts +75 -0
- package/dist/dts/AtLeastOnceStorage.d.ts.map +1 -0
- package/dist/dts/Broadcaster.d.ts +32 -0
- package/dist/dts/Broadcaster.d.ts.map +1 -0
- package/dist/dts/ManagerConfig.d.ts +61 -0
- package/dist/dts/ManagerConfig.d.ts.map +1 -0
- package/dist/dts/Message.d.ts +106 -0
- package/dist/dts/Message.d.ts.map +1 -0
- package/dist/dts/MessageState.d.ts +107 -0
- package/dist/dts/MessageState.d.ts.map +1 -0
- package/dist/dts/Messenger.d.ts +32 -0
- package/dist/dts/Messenger.d.ts.map +1 -0
- package/dist/dts/Pod.d.ts +81 -0
- package/dist/dts/Pod.d.ts.map +1 -0
- package/dist/dts/PodAddress.d.ts +80 -0
- package/dist/dts/PodAddress.d.ts.map +1 -0
- package/dist/dts/Pods.d.ts +78 -0
- package/dist/dts/Pods.d.ts.map +1 -0
- package/dist/dts/PodsHealth.d.ts +66 -0
- package/dist/dts/PodsHealth.d.ts.map +1 -0
- package/dist/dts/PoisonPill.d.ts +78 -0
- package/dist/dts/PoisonPill.d.ts.map +1 -0
- package/dist/dts/RecipientAddress.d.ts +57 -0
- package/dist/dts/RecipientAddress.d.ts.map +1 -0
- package/dist/dts/RecipientBehaviour.d.ts +72 -0
- package/dist/dts/RecipientBehaviour.d.ts.map +1 -0
- package/dist/dts/RecipientBehaviourContext.d.ts +83 -0
- package/dist/dts/RecipientBehaviourContext.d.ts.map +1 -0
- package/dist/dts/RecipientType.d.ts +96 -0
- package/dist/dts/RecipientType.d.ts.map +1 -0
- package/dist/dts/Serialization.d.ts +58 -0
- package/dist/dts/Serialization.d.ts.map +1 -0
- package/dist/dts/SerializedEnvelope.d.ts +87 -0
- package/dist/dts/SerializedEnvelope.d.ts.map +1 -0
- package/dist/dts/SerializedMessage.d.ts +66 -0
- package/dist/dts/SerializedMessage.d.ts.map +1 -0
- package/dist/dts/ShardId.d.ts +70 -0
- package/dist/dts/ShardId.d.ts.map +1 -0
- package/dist/dts/ShardManager.d.ts +44 -0
- package/dist/dts/ShardManager.d.ts.map +1 -0
- package/dist/dts/ShardManagerClient.d.ts +50 -0
- package/dist/dts/ShardManagerClient.d.ts.map +1 -0
- package/dist/dts/Sharding.d.ts +146 -0
- package/dist/dts/Sharding.d.ts.map +1 -0
- package/dist/dts/ShardingConfig.d.ts +69 -0
- package/dist/dts/ShardingConfig.d.ts.map +1 -0
- package/dist/dts/ShardingEvent.d.ts +90 -0
- package/dist/dts/ShardingEvent.d.ts.map +1 -0
- package/dist/dts/ShardingException.d.ts +125 -0
- package/dist/dts/ShardingException.d.ts.map +1 -0
- package/dist/dts/ShardingRegistrationEvent.d.ts +44 -0
- package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -0
- package/dist/dts/Storage.d.ts +78 -0
- package/dist/dts/Storage.d.ts.map +1 -0
- package/dist/dts/index.d.ts +113 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/internal/atLeastOnce.d.ts +2 -0
- package/dist/dts/internal/atLeastOnce.d.ts.map +1 -0
- package/dist/dts/internal/atLeastOnceStorage.d.ts +2 -0
- package/dist/dts/internal/atLeastOnceStorage.d.ts.map +1 -0
- package/dist/dts/internal/entityManager.d.ts +2 -0
- package/dist/dts/internal/entityManager.d.ts.map +1 -0
- package/dist/dts/internal/entityState.d.ts +21 -0
- package/dist/dts/internal/entityState.d.ts.map +1 -0
- package/dist/dts/internal/managerConfig.d.ts +2 -0
- package/dist/dts/internal/managerConfig.d.ts.map +1 -0
- package/dist/dts/internal/message.d.ts +9 -0
- package/dist/dts/internal/message.d.ts.map +1 -0
- package/dist/dts/internal/messageState.d.ts +2 -0
- package/dist/dts/internal/messageState.d.ts.map +1 -0
- package/dist/dts/internal/podWithMetadata.d.ts +2 -0
- package/dist/dts/internal/podWithMetadata.d.ts.map +1 -0
- package/dist/dts/internal/pods.d.ts +2 -0
- package/dist/dts/internal/pods.d.ts.map +1 -0
- package/dist/dts/internal/podsHealth.d.ts +2 -0
- package/dist/dts/internal/podsHealth.d.ts.map +1 -0
- package/dist/dts/internal/recipientBehaviour.d.ts +2 -0
- package/dist/dts/internal/recipientBehaviour.d.ts.map +1 -0
- package/dist/dts/internal/recipientBehaviourContext.d.ts +2 -0
- package/dist/dts/internal/recipientBehaviourContext.d.ts.map +1 -0
- package/dist/dts/internal/serialization.d.ts +2 -0
- package/dist/dts/internal/serialization.d.ts.map +1 -0
- package/dist/dts/internal/shardManager.d.ts +12 -0
- package/dist/dts/internal/shardManager.d.ts.map +1 -0
- package/dist/dts/internal/shardManagerClient.d.ts +2 -0
- package/dist/dts/internal/shardManagerClient.d.ts.map +1 -0
- package/dist/dts/internal/shardManagerState.d.ts +26 -0
- package/dist/dts/internal/shardManagerState.d.ts.map +1 -0
- package/dist/dts/internal/sharding.d.ts +2 -0
- package/dist/dts/internal/sharding.d.ts.map +1 -0
- package/dist/dts/internal/shardingConfig.d.ts +2 -0
- package/dist/dts/internal/shardingConfig.d.ts.map +1 -0
- package/dist/dts/internal/storage.d.ts +2 -0
- package/dist/dts/internal/storage.d.ts.map +1 -0
- package/dist/dts/internal/utils.d.ts +2 -0
- package/dist/dts/internal/utils.d.ts.map +1 -0
- package/dist/esm/AtLeastOnce.js +12 -0
- package/dist/esm/AtLeastOnce.js.map +1 -0
- package/dist/esm/AtLeastOnceStorage.js +17 -0
- package/dist/esm/AtLeastOnceStorage.js.map +1 -0
- package/dist/esm/Broadcaster.js +2 -0
- package/dist/esm/Broadcaster.js.map +1 -0
- package/dist/esm/ManagerConfig.js +26 -0
- package/dist/esm/ManagerConfig.js.map +1 -0
- package/dist/esm/Message.js +33 -0
- package/dist/esm/Message.js.map +1 -0
- package/dist/esm/MessageState.js +47 -0
- package/dist/esm/MessageState.js.map +1 -0
- package/dist/esm/Messenger.js +2 -0
- package/dist/esm/Messenger.js.map +1 -0
- package/dist/esm/Pod.js +65 -0
- package/dist/esm/Pod.js.map +1 -0
- package/dist/esm/PodAddress.js +64 -0
- package/dist/esm/PodAddress.js.map +1 -0
- package/dist/esm/Pods.js +27 -0
- package/dist/esm/Pods.js.map +1 -0
- package/dist/esm/PodsHealth.js +33 -0
- package/dist/esm/PodsHealth.js.map +1 -0
- package/dist/esm/PoisonPill.js +65 -0
- package/dist/esm/PoisonPill.js.map +1 -0
- package/dist/esm/RecipientAddress.js +67 -0
- package/dist/esm/RecipientAddress.js.map +1 -0
- package/dist/esm/RecipientBehaviour.js +30 -0
- package/dist/esm/RecipientBehaviour.js.map +1 -0
- package/dist/esm/RecipientBehaviourContext.js +56 -0
- package/dist/esm/RecipientBehaviourContext.js.map +1 -0
- package/dist/esm/RecipientType.js +105 -0
- package/dist/esm/RecipientType.js.map +1 -0
- package/dist/esm/Serialization.js +24 -0
- package/dist/esm/Serialization.js.map +1 -0
- package/dist/esm/SerializedEnvelope.js +75 -0
- package/dist/esm/SerializedEnvelope.js.map +1 -0
- package/dist/esm/SerializedMessage.js +51 -0
- package/dist/esm/SerializedMessage.js.map +1 -0
- package/dist/esm/ShardId.js +54 -0
- package/dist/esm/ShardId.js.map +1 -0
- package/dist/esm/ShardManager.js +17 -0
- package/dist/esm/ShardManager.js.map +1 -0
- package/dist/esm/ShardManagerClient.js +22 -0
- package/dist/esm/ShardManagerClient.js.map +1 -0
- package/dist/esm/Sharding.js +98 -0
- package/dist/esm/Sharding.js.map +1 -0
- package/dist/esm/ShardingConfig.js +33 -0
- package/dist/esm/ShardingConfig.js.map +1 -0
- package/dist/esm/ShardingEvent.js +62 -0
- package/dist/esm/ShardingEvent.js.map +1 -0
- package/dist/esm/ShardingException.js +91 -0
- package/dist/esm/ShardingException.js.map +1 -0
- package/dist/esm/ShardingRegistrationEvent.js +36 -0
- package/dist/esm/ShardingRegistrationEvent.js.map +1 -0
- package/dist/esm/Storage.js +32 -0
- package/dist/esm/Storage.js.map +1 -0
- package/dist/esm/index.js +113 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/atLeastOnce.js +26 -0
- package/dist/esm/internal/atLeastOnce.js.map +1 -0
- package/dist/esm/internal/atLeastOnceStorage.js +154 -0
- package/dist/esm/internal/atLeastOnceStorage.js.map +1 -0
- package/dist/esm/internal/entityManager.js +159 -0
- package/dist/esm/internal/entityManager.js.map +1 -0
- package/dist/esm/internal/entityState.js +35 -0
- package/dist/esm/internal/entityState.js.map +1 -0
- package/dist/esm/internal/managerConfig.js +38 -0
- package/dist/esm/internal/managerConfig.js.map +1 -0
- package/dist/esm/internal/message.js +32 -0
- package/dist/esm/internal/message.js.map +1 -0
- package/dist/esm/internal/messageState.js +66 -0
- package/dist/esm/internal/messageState.js.map +1 -0
- package/dist/esm/internal/podWithMetadata.js +41 -0
- package/dist/esm/internal/podWithMetadata.js.map +1 -0
- package/dist/esm/internal/pods.js +25 -0
- package/dist/esm/internal/pods.js.map +1 -0
- package/dist/esm/internal/podsHealth.js +30 -0
- package/dist/esm/internal/podsHealth.js.map +1 -0
- package/dist/esm/internal/recipientBehaviour.js +42 -0
- package/dist/esm/internal/recipientBehaviour.js.map +1 -0
- package/dist/esm/internal/recipientBehaviourContext.js +26 -0
- package/dist/esm/internal/recipientBehaviourContext.js.map +1 -0
- package/dist/esm/internal/serialization.js +39 -0
- package/dist/esm/internal/serialization.js.map +1 -0
- package/dist/esm/internal/shardManager.js +256 -0
- package/dist/esm/internal/shardManager.js.map +1 -0
- package/dist/esm/internal/shardManagerClient.js +38 -0
- package/dist/esm/internal/shardManagerClient.js.map +1 -0
- package/dist/esm/internal/shardManagerState.js +36 -0
- package/dist/esm/internal/shardManagerState.js.map +1 -0
- package/dist/esm/internal/sharding.js +288 -0
- package/dist/esm/internal/sharding.js.map +1 -0
- package/dist/esm/internal/shardingConfig.js +47 -0
- package/dist/esm/internal/shardingConfig.js.map +1 -0
- package/dist/esm/internal/storage.js +42 -0
- package/dist/esm/internal/storage.js.map +1 -0
- package/dist/esm/internal/utils.js +56 -0
- package/dist/esm/internal/utils.js.map +1 -0
- package/dist/esm/package.json +4 -0
- package/package.json +259 -0
- package/src/AtLeastOnce.ts +28 -0
- package/src/AtLeastOnceStorage.ts +96 -0
- package/src/Broadcaster.ts +48 -0
- package/src/ManagerConfig.ts +67 -0
- package/src/Message.ts +132 -0
- package/src/MessageState.ts +126 -0
- package/src/Messenger.ts +40 -0
- package/src/Pod.ts +95 -0
- package/src/PodAddress.ts +94 -0
- package/src/Pods.ts +100 -0
- package/src/PodsHealth.ts +74 -0
- package/src/PoisonPill.ts +105 -0
- package/src/RecipientAddress.ts +72 -0
- package/src/RecipientBehaviour.ts +108 -0
- package/src/RecipientBehaviourContext.ts +101 -0
- package/src/RecipientType.ts +134 -0
- package/src/Serialization.ts +72 -0
- package/src/SerializedEnvelope.ts +109 -0
- package/src/SerializedMessage.ts +82 -0
- package/src/ShardId.ts +79 -0
- package/src/ShardManager.ts +53 -0
- package/src/ShardManagerClient.ts +57 -0
- package/src/Sharding.ts +214 -0
- package/src/ShardingConfig.ts +76 -0
- package/src/ShardingEvent.ts +121 -0
- package/src/ShardingException.ts +151 -0
- package/src/ShardingRegistrationEvent.ts +62 -0
- package/src/Storage.ts +92 -0
- package/src/index.ts +139 -0
- package/src/internal/atLeastOnce.ts +59 -0
- package/src/internal/atLeastOnceStorage.ts +218 -0
- package/src/internal/entityManager.ts +404 -0
- package/src/internal/entityState.ts +64 -0
- package/src/internal/managerConfig.ts +84 -0
- package/src/internal/message.ts +64 -0
- package/src/internal/messageState.ts +98 -0
- package/src/internal/podWithMetadata.ts +72 -0
- package/src/internal/pods.ts +29 -0
- package/src/internal/podsHealth.ts +39 -0
- package/src/internal/recipientBehaviour.ts +133 -0
- package/src/internal/recipientBehaviourContext.ts +70 -0
- package/src/internal/serialization.ts +59 -0
- package/src/internal/shardManager.ts +593 -0
- package/src/internal/shardManagerClient.ts +49 -0
- package/src/internal/shardManagerState.ts +80 -0
- package/src/internal/sharding.ts +793 -0
- package/src/internal/shardingConfig.ts +97 -0
- package/src/internal/storage.ts +60 -0
- package/src/internal/utils.ts +54 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import type * as Message from "./Message.js"
|
5
|
+
import type * as RecipientType from "./RecipientType.js"
|
6
|
+
|
7
|
+
interface EntityRegistered<Msg extends Message.Message.Any> {
|
8
|
+
_tag: "EntityRegistered"
|
9
|
+
entityType: RecipientType.EntityType<Msg>
|
10
|
+
}
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Constructs and event that occurs when a new EntityType gets registered.
|
14
|
+
*
|
15
|
+
* @since 1.0.0
|
16
|
+
* @category constructors
|
17
|
+
*/
|
18
|
+
export function EntityRegistered<Msg extends Message.Message.Any>(
|
19
|
+
entityType: RecipientType.EntityType<Msg>
|
20
|
+
): ShardingRegistrationEvent {
|
21
|
+
return ({ _tag: "EntityRegistered", entityType })
|
22
|
+
}
|
23
|
+
|
24
|
+
interface SingletonRegistered {
|
25
|
+
_tag: "SingletonRegistered"
|
26
|
+
name: string
|
27
|
+
}
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Constructs a new event that occurs when a new Singleton is registered.
|
31
|
+
*
|
32
|
+
* @since 1.0.0
|
33
|
+
* @category constructors
|
34
|
+
*/
|
35
|
+
export function SingletonRegistered(name: string): ShardingRegistrationEvent {
|
36
|
+
return ({ _tag: "SingletonRegistered", name })
|
37
|
+
}
|
38
|
+
|
39
|
+
interface TopicRegistered<Msg extends Message.Message.Any> {
|
40
|
+
_tag: "TopicRegistered"
|
41
|
+
topicType: RecipientType.TopicType<Msg>
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Constructs a new event that occurs when a topic is Registered.
|
46
|
+
* @since 1.0.0
|
47
|
+
* @category constructors
|
48
|
+
*/
|
49
|
+
export function TopicRegistered<Msg extends Message.Message.Any>(
|
50
|
+
topicType: RecipientType.TopicType<Msg>
|
51
|
+
): ShardingRegistrationEvent {
|
52
|
+
return ({ _tag: "TopicRegistered", topicType })
|
53
|
+
}
|
54
|
+
|
55
|
+
/**
|
56
|
+
* @since 1.0.0
|
57
|
+
* @category models
|
58
|
+
*/
|
59
|
+
export type ShardingRegistrationEvent =
|
60
|
+
| EntityRegistered<any>
|
61
|
+
| SingletonRegistered
|
62
|
+
| TopicRegistered<any>
|
package/src/Storage.ts
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
import type * as Context from "effect/Context"
|
5
|
+
import type * as Effect from "effect/Effect"
|
6
|
+
import type * as HashMap from "effect/HashMap"
|
7
|
+
import type * as Layer from "effect/Layer"
|
8
|
+
import type * as Option from "effect/Option"
|
9
|
+
import type * as Stream from "effect/Stream"
|
10
|
+
import * as internal from "./internal/storage.js"
|
11
|
+
import type * as Pod from "./Pod.js"
|
12
|
+
import type * as PodAddress from "./PodAddress.js"
|
13
|
+
import type * as ShardId from "./ShardId.js"
|
14
|
+
|
15
|
+
/**
|
16
|
+
* @since 1.0.0
|
17
|
+
* @category symbols
|
18
|
+
*/
|
19
|
+
export const StorageTypeId: unique symbol = internal.StorageTypeId
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @since 1.0.0
|
23
|
+
* @category symbols
|
24
|
+
*/
|
25
|
+
export type StorageTypeId = typeof StorageTypeId
|
26
|
+
|
27
|
+
/**
|
28
|
+
* The storage Service is responsible of persisting assignments and registered pods.
|
29
|
+
* The storage is expected to be shared among all pods, so it works also as communication of assignments between Pods.
|
30
|
+
*
|
31
|
+
* @since 1.0.0
|
32
|
+
* @category models
|
33
|
+
*/
|
34
|
+
export interface Storage {
|
35
|
+
readonly [StorageTypeId]: StorageTypeId
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Get the current state of shard assignments to pods
|
39
|
+
*/
|
40
|
+
readonly getAssignments: Effect.Effect<HashMap.HashMap<ShardId.ShardId, Option.Option<PodAddress.PodAddress>>>
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Save the current state of shard assignments to pods
|
44
|
+
*/
|
45
|
+
readonly saveAssignments: (
|
46
|
+
assignments: HashMap.HashMap<ShardId.ShardId, Option.Option<PodAddress.PodAddress>>
|
47
|
+
) => Effect.Effect<void>
|
48
|
+
|
49
|
+
/**
|
50
|
+
* A stream that will emit the state of shard assignments whenever it changes
|
51
|
+
*/
|
52
|
+
readonly assignmentsStream: Stream.Stream<HashMap.HashMap<ShardId.ShardId, Option.Option<PodAddress.PodAddress>>>
|
53
|
+
|
54
|
+
/**
|
55
|
+
* Get the list of existing pods
|
56
|
+
*/
|
57
|
+
readonly getPods: Effect.Effect<HashMap.HashMap<PodAddress.PodAddress, Pod.Pod>>
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Save the list of existing pods
|
61
|
+
*/
|
62
|
+
readonly savePods: (pods: HashMap.HashMap<PodAddress.PodAddress, Pod.Pod>) => Effect.Effect<void>
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
* @since 1.0.0
|
67
|
+
* @category constructors
|
68
|
+
*/
|
69
|
+
export const make: (args: Omit<Storage, typeof StorageTypeId>) => Storage = internal.make
|
70
|
+
|
71
|
+
/**
|
72
|
+
* @since 1.0.0
|
73
|
+
* @category context
|
74
|
+
*/
|
75
|
+
export const Storage: Context.Tag<Storage, Storage> = internal.storageTag
|
76
|
+
|
77
|
+
/**
|
78
|
+
* A layer that stores data in-memory.
|
79
|
+
* This is useful for testing with a single pod only.
|
80
|
+
*
|
81
|
+
* @since 1.0.0
|
82
|
+
* @category layers
|
83
|
+
*/
|
84
|
+
export const memory: Layer.Layer<Storage> = internal.memory
|
85
|
+
|
86
|
+
/**
|
87
|
+
* A layer that does nothing, useful for testing.
|
88
|
+
*
|
89
|
+
* @since 1.0.0
|
90
|
+
* @category layers
|
91
|
+
*/
|
92
|
+
export const noop: Layer.Layer<Storage> = internal.noop
|
package/src/index.ts
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
/**
|
2
|
+
* @since 1.0.0
|
3
|
+
*/
|
4
|
+
export * as AtLeastOnce from "./AtLeastOnce.js"
|
5
|
+
|
6
|
+
/**
|
7
|
+
* @since 1.0.0
|
8
|
+
*/
|
9
|
+
export * as AtLeastOnceStorage from "./AtLeastOnceStorage.js"
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @since 1.0.0
|
13
|
+
*/
|
14
|
+
export * as Broadcaster from "./Broadcaster.js"
|
15
|
+
|
16
|
+
/**
|
17
|
+
* @since 1.0.0
|
18
|
+
*/
|
19
|
+
export * as ManagerConfig from "./ManagerConfig.js"
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @since 1.0.0
|
23
|
+
*/
|
24
|
+
export * as Message from "./Message.js"
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @since 1.0.0
|
28
|
+
*/
|
29
|
+
export * as MessageState from "./MessageState.js"
|
30
|
+
|
31
|
+
/**
|
32
|
+
* @since 1.0.0
|
33
|
+
*/
|
34
|
+
export * as Messenger from "./Messenger.js"
|
35
|
+
|
36
|
+
/**
|
37
|
+
* @since 1.0.0
|
38
|
+
*/
|
39
|
+
export * as Pod from "./Pod.js"
|
40
|
+
|
41
|
+
/**
|
42
|
+
* @since 1.0.0
|
43
|
+
*/
|
44
|
+
export * as PodAddress from "./PodAddress.js"
|
45
|
+
|
46
|
+
/**
|
47
|
+
* @since 1.0.0
|
48
|
+
*/
|
49
|
+
export * as Pods from "./Pods.js"
|
50
|
+
|
51
|
+
/**
|
52
|
+
* @since 1.0.0
|
53
|
+
*/
|
54
|
+
export * as PodsHealth from "./PodsHealth.js"
|
55
|
+
|
56
|
+
/**
|
57
|
+
* @since 1.0.0
|
58
|
+
*/
|
59
|
+
export * as PoisonPill from "./PoisonPill.js"
|
60
|
+
|
61
|
+
/**
|
62
|
+
* @since 1.0.0
|
63
|
+
*/
|
64
|
+
export * as RecipientAddress from "./RecipientAddress.js"
|
65
|
+
|
66
|
+
/**
|
67
|
+
* @since 1.0.0
|
68
|
+
*/
|
69
|
+
export * as RecipientBehaviour from "./RecipientBehaviour.js"
|
70
|
+
|
71
|
+
/**
|
72
|
+
* @since 1.0.0
|
73
|
+
*/
|
74
|
+
export * as RecipientBehaviourContext from "./RecipientBehaviourContext.js"
|
75
|
+
|
76
|
+
/**
|
77
|
+
* @since 1.0.0
|
78
|
+
*/
|
79
|
+
export * as RecipientType from "./RecipientType.js"
|
80
|
+
|
81
|
+
/**
|
82
|
+
* @since 1.0.0
|
83
|
+
*/
|
84
|
+
export * as Serialization from "./Serialization.js"
|
85
|
+
|
86
|
+
/**
|
87
|
+
* @since 1.0.0
|
88
|
+
*/
|
89
|
+
export * as SerializedEnvelope from "./SerializedEnvelope.js"
|
90
|
+
|
91
|
+
/**
|
92
|
+
* @since 1.0.0
|
93
|
+
*/
|
94
|
+
export * as SerializedMessage from "./SerializedMessage.js"
|
95
|
+
|
96
|
+
/**
|
97
|
+
* @since 1.0.0
|
98
|
+
*/
|
99
|
+
export * as ShardId from "./ShardId.js"
|
100
|
+
|
101
|
+
/**
|
102
|
+
* @since 1.0.0
|
103
|
+
*/
|
104
|
+
export * as ShardManager from "./ShardManager.js"
|
105
|
+
|
106
|
+
/**
|
107
|
+
* @since 1.0.0
|
108
|
+
*/
|
109
|
+
export * as ShardManagerClient from "./ShardManagerClient.js"
|
110
|
+
|
111
|
+
/**
|
112
|
+
* @since 1.0.0
|
113
|
+
*/
|
114
|
+
export * as Sharding from "./Sharding.js"
|
115
|
+
|
116
|
+
/**
|
117
|
+
* @since 1.0.0
|
118
|
+
*/
|
119
|
+
export * as ShardingConfig from "./ShardingConfig.js"
|
120
|
+
|
121
|
+
/**
|
122
|
+
* @since 1.0.0
|
123
|
+
*/
|
124
|
+
export * as ShardingEvent from "./ShardingEvent.js"
|
125
|
+
|
126
|
+
/**
|
127
|
+
* @since 1.0.0
|
128
|
+
*/
|
129
|
+
export * as ShardingException from "./ShardingException.js"
|
130
|
+
|
131
|
+
/**
|
132
|
+
* @since 1.0.0
|
133
|
+
*/
|
134
|
+
export * as ShardingRegistrationEvent from "./ShardingRegistrationEvent.js"
|
135
|
+
|
136
|
+
/**
|
137
|
+
* @since 1.0.0
|
138
|
+
*/
|
139
|
+
export * as Storage from "./Storage.js"
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import type * as Duration from "effect/Duration"
|
2
|
+
import * as Effect from "effect/Effect"
|
3
|
+
import { pipe } from "effect/Function"
|
4
|
+
import type * as Scope from "effect/Scope"
|
5
|
+
import * as Stream from "effect/Stream"
|
6
|
+
import * as AtLeastOnceStorage from "../AtLeastOnceStorage.js"
|
7
|
+
import type * as Message from "../Message.js"
|
8
|
+
import * as MessageState from "../MessageState.js"
|
9
|
+
import type * as RecipientBehaviour from "../RecipientBehaviour.js"
|
10
|
+
import * as RecipientBehaviourContext from "../RecipientBehaviourContext.js"
|
11
|
+
import * as Sharding from "../Sharding.js"
|
12
|
+
|
13
|
+
/** @internal */
|
14
|
+
export function runPendingMessageSweeperScoped(
|
15
|
+
interval: Duration.Duration
|
16
|
+
): Effect.Effect<void, never, AtLeastOnceStorage.AtLeastOnceStorage | Sharding.Sharding | Scope.Scope> {
|
17
|
+
return Effect.flatMap(AtLeastOnceStorage.AtLeastOnceStorage, (storage) =>
|
18
|
+
pipe(
|
19
|
+
Sharding.getAssignedShardIds,
|
20
|
+
Effect.flatMap((shardIds) =>
|
21
|
+
pipe(
|
22
|
+
storage.sweepPending(shardIds),
|
23
|
+
Stream.mapEffect((envelope) => Sharding.sendMessageToLocalEntityManagerWithoutRetries(envelope)),
|
24
|
+
Stream.runDrain
|
25
|
+
)
|
26
|
+
),
|
27
|
+
Effect.delay(interval),
|
28
|
+
Effect.catchAllCause(Effect.logError),
|
29
|
+
Effect.forever,
|
30
|
+
Effect.forkScoped,
|
31
|
+
Effect.asVoid
|
32
|
+
))
|
33
|
+
}
|
34
|
+
|
35
|
+
/** @internal */
|
36
|
+
export function atLeastOnceRecipientBehaviour<Msg extends Message.Message.Any, R>(
|
37
|
+
fa: RecipientBehaviour.RecipientBehaviour<Msg, R>
|
38
|
+
): RecipientBehaviour.RecipientBehaviour<Msg, R | AtLeastOnceStorage.AtLeastOnceStorage> {
|
39
|
+
return Effect.gen(function*(_) {
|
40
|
+
const storage = yield* _(AtLeastOnceStorage.AtLeastOnceStorage)
|
41
|
+
const entityId = yield* _(RecipientBehaviourContext.entityId)
|
42
|
+
const shardId = yield* _(RecipientBehaviourContext.shardId)
|
43
|
+
const recipientType = yield* _(RecipientBehaviourContext.recipientType)
|
44
|
+
const offer = yield* _(fa)
|
45
|
+
return <A extends Msg>(message: A) =>
|
46
|
+
pipe(
|
47
|
+
storage.upsert(recipientType, shardId, entityId, message),
|
48
|
+
Effect.zipRight(
|
49
|
+
pipe(
|
50
|
+
offer(message),
|
51
|
+
Effect.tap(MessageState.match({
|
52
|
+
onAcknowledged: () => Effect.void,
|
53
|
+
onProcessed: () => storage.markAsProcessed(recipientType, shardId, entityId, message)
|
54
|
+
}))
|
55
|
+
)
|
56
|
+
)
|
57
|
+
)
|
58
|
+
})
|
59
|
+
}
|
@@ -0,0 +1,218 @@
|
|
1
|
+
import * as Schema from "@effect/schema/Schema"
|
2
|
+
import * as SqlClient from "@effect/sql/SqlClient"
|
3
|
+
import type * as SqlError from "@effect/sql/SqlError"
|
4
|
+
import * as SqlResolver from "@effect/sql/SqlResolver"
|
5
|
+
import * as Context from "effect/Context"
|
6
|
+
import * as Effect from "effect/Effect"
|
7
|
+
import * as Layer from "effect/Layer"
|
8
|
+
import * as PrimaryKey from "effect/PrimaryKey"
|
9
|
+
import * as Stream from "effect/Stream"
|
10
|
+
import type * as AtLeastOnceStorage from "../AtLeastOnceStorage.js"
|
11
|
+
import * as RecipientAddress from "../RecipientAddress.js"
|
12
|
+
import type * as Serialization from "../Serialization.js"
|
13
|
+
import * as SerializedEnvelope from "../SerializedEnvelope.js"
|
14
|
+
import * as SerializedMessage from "../SerializedMessage.js"
|
15
|
+
import * as InternalSerialization from "./serialization.js"
|
16
|
+
|
17
|
+
/** @internal */
|
18
|
+
const SymbolKey = "@effect/cluster/AtLeastOnceStorage"
|
19
|
+
|
20
|
+
/** @internal */
|
21
|
+
export const TypeId: AtLeastOnceStorage.TypeId = Symbol.for(
|
22
|
+
SymbolKey
|
23
|
+
) as AtLeastOnceStorage.TypeId
|
24
|
+
|
25
|
+
/** @internal */
|
26
|
+
export const atLeastOnceStorageTag: Context.Tag<
|
27
|
+
AtLeastOnceStorage.AtLeastOnceStorage,
|
28
|
+
AtLeastOnceStorage.AtLeastOnceStorage
|
29
|
+
> = Context.GenericTag<AtLeastOnceStorage.AtLeastOnceStorage>(SymbolKey)
|
30
|
+
|
31
|
+
const make = ({ table }: AtLeastOnceStorage.AtLeastOnceStorage.MakeOptions): Effect.Effect<
|
32
|
+
AtLeastOnceStorage.AtLeastOnceStorage,
|
33
|
+
SqlError.SqlError,
|
34
|
+
SqlClient.SqlClient | Serialization.Serialization
|
35
|
+
> =>
|
36
|
+
Effect.gen(function*() {
|
37
|
+
const sql = yield* SqlClient.SqlClient
|
38
|
+
const serialization = yield* InternalSerialization.serializationTag
|
39
|
+
|
40
|
+
yield* sql.onDialect({
|
41
|
+
mssql: () =>
|
42
|
+
sql`
|
43
|
+
IF OBJECT_ID(N'${sql.literal(table)}', N'U') IS NULL
|
44
|
+
CREATE TABLE ${sql(table)} (
|
45
|
+
recipient_name VARCHAR(255) NOT NULL,
|
46
|
+
shard_id INT NOT NULL DEFAULT 0,
|
47
|
+
entity_id VARCHAR(255) NOT NULL,
|
48
|
+
message_id VARCHAR(255) NOT NULL,
|
49
|
+
message_body TEXT NOT NULL,
|
50
|
+
processed BIT NOT NULL DEFAULT 0,
|
51
|
+
CONSTRAINT ${sql(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
|
52
|
+
WITH (IGNORE_DUP_KEY = ON)
|
53
|
+
)
|
54
|
+
`,
|
55
|
+
mysql: () =>
|
56
|
+
sql`
|
57
|
+
CREATE TABLE IF NOT EXISTS ${sql(table)} (
|
58
|
+
recipient_name VARCHAR(255) NOT NULL,
|
59
|
+
shard_id INT NOT NULL DEFAULT 0,
|
60
|
+
entity_id VARCHAR(255) NOT NULL,
|
61
|
+
message_id VARCHAR(255) NOT NULL,
|
62
|
+
message_body TEXT NOT NULL,
|
63
|
+
processed BOOLEAN NOT NULL DEFAULT FALSE,
|
64
|
+
CONSTRAINT ${sql(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
|
65
|
+
)
|
66
|
+
`,
|
67
|
+
pg: () =>
|
68
|
+
Effect.catchAll(sql`SELECT ${table}::regclass`, () =>
|
69
|
+
sql`
|
70
|
+
CREATE TABLE ${sql(table)} (
|
71
|
+
recipient_name VARCHAR(255) NOT NULL,
|
72
|
+
shard_id INT NOT NULL DEFAULT 0,
|
73
|
+
entity_id VARCHAR(255) NOT NULL,
|
74
|
+
message_id VARCHAR(255) NOT NULL,
|
75
|
+
message_body TEXT NOT NULL,
|
76
|
+
processed BOOLEAN NOT NULL DEFAULT FALSE,
|
77
|
+
CONSTRAINT ${sql(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
|
78
|
+
)
|
79
|
+
`),
|
80
|
+
sqlite: () =>
|
81
|
+
sql`
|
82
|
+
CREATE TABLE IF NOT EXISTS ${sql.literal(table)} (
|
83
|
+
recipient_name VARCHAR(255) NOT NULL,
|
84
|
+
shard_id INT NOT NULL DEFAULT (0),
|
85
|
+
entity_id VARCHAR(255) NOT NULL,
|
86
|
+
message_id VARCHAR(255) NOT NULL,
|
87
|
+
message_body CLOB NOT NULL,
|
88
|
+
processed BOOLEAN NOT NULL DEFAULT (0),
|
89
|
+
CONSTRAINT ${sql.literal(table)}_pkey PRIMARY KEY (recipient_name, entity_id, message_id)
|
90
|
+
)
|
91
|
+
`
|
92
|
+
})
|
93
|
+
|
94
|
+
const UpsertEntryResolver = yield* SqlResolver.void("UpsertEntry", {
|
95
|
+
Request: Schema.Struct({
|
96
|
+
recipient_name: Schema.String,
|
97
|
+
shard_id: Schema.Number,
|
98
|
+
entity_id: Schema.String,
|
99
|
+
message_id: Schema.String,
|
100
|
+
message_body: Schema.String
|
101
|
+
}),
|
102
|
+
execute: (requests) =>
|
103
|
+
sql.onDialect({
|
104
|
+
mssql: () =>
|
105
|
+
sql`
|
106
|
+
INSERT INTO ${sql(table)}
|
107
|
+
${sql.insert(requests)}
|
108
|
+
`,
|
109
|
+
mysql: () =>
|
110
|
+
sql`
|
111
|
+
INSERT INTO ${sql(table)}
|
112
|
+
${sql.insert(requests)}
|
113
|
+
ON DUPLICATE KEY UPDATE
|
114
|
+
recipient_name = recipient_name,
|
115
|
+
entity_id = entity_id,
|
116
|
+
message_id = message_id
|
117
|
+
`,
|
118
|
+
pg: () =>
|
119
|
+
sql`
|
120
|
+
INSERT INTO ${sql(table)}
|
121
|
+
${sql.insert(requests)}
|
122
|
+
ON CONFLICT ON CONSTRAINT ${sql(table)}_pkey DO NOTHING
|
123
|
+
`,
|
124
|
+
sqlite: () =>
|
125
|
+
sql`
|
126
|
+
INSERT INTO ${sql(table)}
|
127
|
+
${sql.insert(requests)}
|
128
|
+
ON CONFLICT (recipient_name, entity_id, message_id) DO NOTHING
|
129
|
+
`
|
130
|
+
})
|
131
|
+
})
|
132
|
+
|
133
|
+
const SweepPendingResolver = yield* SqlResolver.ordered("SweepPending", {
|
134
|
+
Request: Schema.Number,
|
135
|
+
Result: Schema.Struct({
|
136
|
+
shard_id: Schema.Number,
|
137
|
+
entity_id: Schema.String,
|
138
|
+
message_id: Schema.String,
|
139
|
+
recipient_name: Schema.String,
|
140
|
+
message_body: Schema.String
|
141
|
+
}),
|
142
|
+
execute: (shard_ids) =>
|
143
|
+
sql`
|
144
|
+
SELECT
|
145
|
+
shard_id,
|
146
|
+
entity_id,
|
147
|
+
message_id,
|
148
|
+
recipient_name,
|
149
|
+
message_body
|
150
|
+
FROM ${sql(table)}
|
151
|
+
WHERE ${
|
152
|
+
sql.and([
|
153
|
+
sql`processed = ${false}`,
|
154
|
+
sql.in("shard_id", shard_ids)
|
155
|
+
])
|
156
|
+
}
|
157
|
+
`
|
158
|
+
})
|
159
|
+
|
160
|
+
return {
|
161
|
+
[TypeId]: TypeId,
|
162
|
+
upsert: (recipientType, shardId, entityId, message) =>
|
163
|
+
serialization.encode(recipientType.schema, message).pipe(
|
164
|
+
Effect.flatMap(
|
165
|
+
(message_body) =>
|
166
|
+
UpsertEntryResolver.execute({
|
167
|
+
recipient_name: recipientType.name,
|
168
|
+
shard_id: shardId.value,
|
169
|
+
entity_id: entityId,
|
170
|
+
message_id: PrimaryKey.value(message),
|
171
|
+
message_body: message_body.value
|
172
|
+
})
|
173
|
+
),
|
174
|
+
Effect.catchAllCause(Effect.logError)
|
175
|
+
),
|
176
|
+
markAsProcessed: (recipientType, _shardId, entityId, message) => {
|
177
|
+
return sql`
|
178
|
+
UPDATE ${sql(table)}
|
179
|
+
SET ${
|
180
|
+
sql.onDialectOrElse({
|
181
|
+
pg: () => sql.update({ processed: "TRUE" }),
|
182
|
+
orElse: () => sql.update({ processed: 1 })
|
183
|
+
})
|
184
|
+
}
|
185
|
+
WHERE ${
|
186
|
+
sql.and([
|
187
|
+
sql`recipient_name = ${recipientType.name}`,
|
188
|
+
sql`entity_id = ${entityId}`,
|
189
|
+
sql`message_id = ${PrimaryKey.value(message)}`
|
190
|
+
])
|
191
|
+
}`.pipe(Effect.catchAllCause(Effect.logError))
|
192
|
+
},
|
193
|
+
sweepPending: (shardIds) =>
|
194
|
+
Effect.forEach(shardIds, (id) =>
|
195
|
+
Effect.withRequestCaching(true)(
|
196
|
+
SweepPendingResolver.execute(id.value)
|
197
|
+
), {
|
198
|
+
batching: true
|
199
|
+
}).pipe(
|
200
|
+
Effect.orDie,
|
201
|
+
Stream.fromIterableEffect,
|
202
|
+
Stream.map((entry) =>
|
203
|
+
SerializedEnvelope.make(
|
204
|
+
RecipientAddress.makeRecipientAddress(entry.recipient_name, entry.entity_id),
|
205
|
+
entry.message_id,
|
206
|
+
SerializedMessage.make(entry.message_body)
|
207
|
+
)
|
208
|
+
)
|
209
|
+
)
|
210
|
+
}
|
211
|
+
})
|
212
|
+
|
213
|
+
/** @internal */
|
214
|
+
export const layer = (options: AtLeastOnceStorage.AtLeastOnceStorage.MakeOptions): Layer.Layer<
|
215
|
+
AtLeastOnceStorage.AtLeastOnceStorage,
|
216
|
+
SqlError.SqlError,
|
217
|
+
SqlClient.SqlClient | Serialization.Serialization
|
218
|
+
> => Layer.effect(atLeastOnceStorageTag, make(options))
|