@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,98 @@
|
|
1
|
+
import * as Schema from "@effect/schema/Schema"
|
2
|
+
import * as Effect from "effect/Effect"
|
3
|
+
import { pipe } from "effect/Function"
|
4
|
+
import type * as MessageState from "../MessageState.js"
|
5
|
+
|
6
|
+
/** @internal */
|
7
|
+
const MessageStateSymbolKey = "@effect/cluster/MessageState"
|
8
|
+
|
9
|
+
/** @internal */
|
10
|
+
export const MessageStateTypeId: MessageState.MessageStateTypeId = Symbol.for(
|
11
|
+
MessageStateSymbolKey
|
12
|
+
) as MessageState.MessageStateTypeId
|
13
|
+
|
14
|
+
/** @internal */
|
15
|
+
export function isMessageState(value: unknown): value is MessageState.MessageState<unknown> {
|
16
|
+
return typeof value === "object" && value !== null && MessageStateTypeId in value
|
17
|
+
}
|
18
|
+
|
19
|
+
/** @internal */
|
20
|
+
export const Acknowledged: MessageState.MessageStateAcknowledged = {
|
21
|
+
[MessageStateTypeId]: MessageStateTypeId,
|
22
|
+
_tag: "@effect/cluster/MessageState/Acknowledged"
|
23
|
+
}
|
24
|
+
|
25
|
+
/** @internal */
|
26
|
+
export function Processed<A>(result: A): MessageState.MessageStateProcessed<A> {
|
27
|
+
return ({
|
28
|
+
[MessageStateTypeId]: MessageStateTypeId,
|
29
|
+
_tag: "@effect/cluster/MessageState/Processed",
|
30
|
+
result
|
31
|
+
})
|
32
|
+
}
|
33
|
+
|
34
|
+
/** @internal */
|
35
|
+
export function match<A, B, C = B>(
|
36
|
+
cases: {
|
37
|
+
onAcknowledged: (value: MessageState.MessageStateAcknowledged) => B
|
38
|
+
onProcessed: (exit: MessageState.MessageStateProcessed<A>) => C
|
39
|
+
}
|
40
|
+
) {
|
41
|
+
return (value: MessageState.MessageState<A>) => {
|
42
|
+
switch (value._tag) {
|
43
|
+
case "@effect/cluster/MessageState/Acknowledged":
|
44
|
+
return cases.onAcknowledged(value)
|
45
|
+
case "@effect/cluster/MessageState/Processed":
|
46
|
+
return cases.onProcessed(value)
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
/** @internal */
|
52
|
+
export function mapEffect<A, B, R, E>(
|
53
|
+
value: MessageState.MessageState<A>,
|
54
|
+
fn: (value: A) => Effect.Effect<B, E, R>
|
55
|
+
): Effect.Effect<MessageState.MessageState<B>, E, R> {
|
56
|
+
return pipe(
|
57
|
+
value,
|
58
|
+
match({
|
59
|
+
onAcknowledged: Effect.succeed,
|
60
|
+
onProcessed: (_) =>
|
61
|
+
Effect.map(fn(_.result), (_) => Processed(_)) as Effect.Effect<MessageState.MessageState<B>, E, R>
|
62
|
+
})
|
63
|
+
)
|
64
|
+
}
|
65
|
+
|
66
|
+
/** @internal */
|
67
|
+
export function schema<A, I>(
|
68
|
+
result: Schema.Schema<A, I>
|
69
|
+
): Schema.Schema<
|
70
|
+
MessageState.MessageState<A>,
|
71
|
+
MessageState.MessageState.Encoded<I>
|
72
|
+
> {
|
73
|
+
return Schema.Union(
|
74
|
+
Schema.rename(
|
75
|
+
Schema.Struct({
|
76
|
+
[MessageStateSymbolKey]: Schema.compose(
|
77
|
+
Schema.compose(Schema.Literal(MessageStateSymbolKey), Schema.Symbol, { strict: false }),
|
78
|
+
Schema.UniqueSymbolFromSelf(MessageStateTypeId),
|
79
|
+
{ strict: false }
|
80
|
+
),
|
81
|
+
_tag: Schema.Literal("@effect/cluster/MessageState/Acknowledged")
|
82
|
+
}),
|
83
|
+
{ [MessageStateSymbolKey]: MessageStateTypeId }
|
84
|
+
),
|
85
|
+
Schema.rename(
|
86
|
+
Schema.Struct({
|
87
|
+
[MessageStateSymbolKey]: Schema.compose(
|
88
|
+
Schema.compose(Schema.Literal(MessageStateSymbolKey), Schema.Symbol, { strict: false }),
|
89
|
+
Schema.UniqueSymbolFromSelf(MessageStateTypeId),
|
90
|
+
{ strict: false }
|
91
|
+
),
|
92
|
+
_tag: Schema.Literal("@effect/cluster/MessageState/Processed"),
|
93
|
+
result
|
94
|
+
}),
|
95
|
+
{ [MessageStateSymbolKey]: MessageStateTypeId }
|
96
|
+
)
|
97
|
+
)
|
98
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
import * as Data from "effect/Data"
|
2
|
+
import { pipe } from "effect/Function"
|
3
|
+
import * as List from "effect/List"
|
4
|
+
import * as Option from "effect/Option"
|
5
|
+
import type * as Pod from "../Pod.js"
|
6
|
+
|
7
|
+
/** @internal */
|
8
|
+
const PodWithMetadataSymbolKey = "@effect/cluster/PodWithMetadata"
|
9
|
+
|
10
|
+
/** @internal */
|
11
|
+
export const PodWithMetadataTypeId = Symbol.for(PodWithMetadataSymbolKey)
|
12
|
+
|
13
|
+
/** @internal */
|
14
|
+
export type PodWithMetadataTypeId = typeof PodWithMetadataTypeId
|
15
|
+
|
16
|
+
/** @internal */
|
17
|
+
export class PodWithMetadata extends Data.Class<{
|
18
|
+
[PodWithMetadataTypeId]: PodWithMetadataTypeId
|
19
|
+
pod: Pod.Pod
|
20
|
+
registered: number
|
21
|
+
}> {}
|
22
|
+
|
23
|
+
/** @internal */
|
24
|
+
export function make(pod: Pod.Pod, registered: number): PodWithMetadata {
|
25
|
+
return new PodWithMetadata({ [PodWithMetadataTypeId]: PodWithMetadataTypeId, pod, registered })
|
26
|
+
}
|
27
|
+
|
28
|
+
/** @internal */
|
29
|
+
export function isPodWithMetadata(value: unknown): value is PodWithMetadata {
|
30
|
+
return (
|
31
|
+
typeof value === "object" &&
|
32
|
+
value !== null &&
|
33
|
+
PodWithMetadataTypeId in value &&
|
34
|
+
value[PodWithMetadataTypeId] === PodWithMetadataTypeId
|
35
|
+
)
|
36
|
+
}
|
37
|
+
|
38
|
+
/** @internal */
|
39
|
+
export function extractVersion(pod: PodWithMetadata): List.List<number> {
|
40
|
+
return pipe(
|
41
|
+
List.fromIterable(pod.pod.version.split(".")),
|
42
|
+
List.map((_) => parseInt(_, 10))
|
43
|
+
)
|
44
|
+
}
|
45
|
+
|
46
|
+
/** @internal */
|
47
|
+
export function compareVersion(a: List.List<number>, b: List.List<number>): 0 | 1 | -1 {
|
48
|
+
let restA = a
|
49
|
+
let restB = b
|
50
|
+
while (List.size(restA) > 0 || List.size(restB) > 0) {
|
51
|
+
const numA = pipe(
|
52
|
+
List.head(restA),
|
53
|
+
Option.getOrElse(() => 0)
|
54
|
+
)
|
55
|
+
const numB = pipe(
|
56
|
+
List.head(restB),
|
57
|
+
Option.getOrElse(() => 0)
|
58
|
+
)
|
59
|
+
|
60
|
+
if (numA < numB) return -1
|
61
|
+
if (numB > numA) return 1
|
62
|
+
restA = pipe(
|
63
|
+
List.tail(restA),
|
64
|
+
Option.getOrElse(() => List.empty())
|
65
|
+
)
|
66
|
+
restB = pipe(
|
67
|
+
List.tail(restB),
|
68
|
+
Option.getOrElse(() => List.empty())
|
69
|
+
)
|
70
|
+
}
|
71
|
+
return 0
|
72
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import * as Context from "effect/Context"
|
2
|
+
import * as Effect from "effect/Effect"
|
3
|
+
import * as Layer from "effect/Layer"
|
4
|
+
import type * as Pods from "../Pods.js"
|
5
|
+
|
6
|
+
/** @internal */
|
7
|
+
const PodsSymbolKey = "@effect/cluster/Pods"
|
8
|
+
|
9
|
+
/** @internal */
|
10
|
+
export const PodsTypeId: Pods.PodsTypeId = Symbol.for(PodsSymbolKey) as Pods.PodsTypeId
|
11
|
+
|
12
|
+
/** @internal */
|
13
|
+
export const podsTag = Context.GenericTag<Pods.Pods>(PodsSymbolKey)
|
14
|
+
|
15
|
+
/** @internal */
|
16
|
+
export function make(
|
17
|
+
args: Omit<Pods.Pods, Pods.PodsTypeId>
|
18
|
+
): Pods.Pods {
|
19
|
+
return { [PodsTypeId]: PodsTypeId, ...args }
|
20
|
+
}
|
21
|
+
|
22
|
+
/** @internal */
|
23
|
+
export const noop = Layer.succeed(podsTag, {
|
24
|
+
[PodsTypeId]: PodsTypeId,
|
25
|
+
assignShards: () => Effect.void,
|
26
|
+
unassignShards: () => Effect.void,
|
27
|
+
ping: () => Effect.void,
|
28
|
+
sendAndGetState: () => Effect.never
|
29
|
+
})
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import * as Context from "effect/Context"
|
2
|
+
import * as Data from "effect/Data"
|
3
|
+
import * as Effect from "effect/Effect"
|
4
|
+
import { pipe } from "effect/Function"
|
5
|
+
import * as Layer from "effect/Layer"
|
6
|
+
import * as Option from "effect/Option"
|
7
|
+
import * as Pods from "../Pods.js"
|
8
|
+
import type * as PodsHealth from "../PodsHealth.js"
|
9
|
+
|
10
|
+
/** @internal */
|
11
|
+
const PodsHealthSymbolKey = "@effect/cluster/PodsHealth"
|
12
|
+
|
13
|
+
/** @internal */
|
14
|
+
export const PodsHealthTypeId: PodsHealth.PodsHealthTypeId = Symbol.for(
|
15
|
+
PodsHealthSymbolKey
|
16
|
+
) as PodsHealth.PodsHealthTypeId
|
17
|
+
|
18
|
+
/** @internal */
|
19
|
+
export const podsHealthTag = Context.GenericTag<PodsHealth.PodsHealth>(PodsHealthSymbolKey)
|
20
|
+
|
21
|
+
/** @internal */
|
22
|
+
export function make(args: Omit<PodsHealth.PodsHealth, PodsHealth.PodsHealthTypeId>): PodsHealth.PodsHealth {
|
23
|
+
return Data.struct({ [PodsHealthTypeId]: PodsHealthTypeId, ...args })
|
24
|
+
}
|
25
|
+
|
26
|
+
/** @internal */
|
27
|
+
export const noop = Layer.succeed(podsHealthTag, {
|
28
|
+
[PodsHealthTypeId]: PodsHealthTypeId,
|
29
|
+
isAlive: () => Effect.succeed(true)
|
30
|
+
})
|
31
|
+
|
32
|
+
/** @internal */
|
33
|
+
export const local = Layer.effect(
|
34
|
+
podsHealthTag,
|
35
|
+
Effect.map(Pods.Pods, (podApi) =>
|
36
|
+
make({
|
37
|
+
isAlive: (address) => pipe(podApi.ping(address), Effect.option, Effect.map(Option.isSome))
|
38
|
+
}))
|
39
|
+
)
|
@@ -0,0 +1,133 @@
|
|
1
|
+
import * as Deferred from "effect/Deferred"
|
2
|
+
import * as Effect from "effect/Effect"
|
3
|
+
import { pipe } from "effect/Function"
|
4
|
+
import * as HashMap from "effect/HashMap"
|
5
|
+
import * as Option from "effect/Option"
|
6
|
+
import * as PrimaryKey from "effect/PrimaryKey"
|
7
|
+
import * as Queue from "effect/Queue"
|
8
|
+
import * as Ref from "effect/Ref"
|
9
|
+
import type * as Message from "../Message.js"
|
10
|
+
import * as MessageState from "../MessageState.js"
|
11
|
+
import * as PoisonPill from "../PoisonPill.js"
|
12
|
+
import type * as RecipientBehaviour from "../RecipientBehaviour.js"
|
13
|
+
import * as RecipientBehaviourContext from "../RecipientBehaviourContext.js"
|
14
|
+
|
15
|
+
/** @internal */
|
16
|
+
export function fromFunctionEffect<Msg extends Message.Message.Any, R>(
|
17
|
+
handler: (
|
18
|
+
entityId: string,
|
19
|
+
message: Msg
|
20
|
+
) => Effect.Effect<MessageState.MessageState<Message.Message.Exit<Msg>>, never, R>
|
21
|
+
): RecipientBehaviour.RecipientBehaviour<Msg, R> {
|
22
|
+
return Effect.flatMap(RecipientBehaviourContext.entityId, (entityId) =>
|
23
|
+
pipe(
|
24
|
+
Effect.context<R>(),
|
25
|
+
Effect.map((context) => (message: Msg) =>
|
26
|
+
pipe(
|
27
|
+
handler(entityId, message),
|
28
|
+
Effect.provide(context)
|
29
|
+
)
|
30
|
+
)
|
31
|
+
))
|
32
|
+
}
|
33
|
+
|
34
|
+
/** @internal */
|
35
|
+
export function fromFunctionEffectStateful<S, R, Msg extends Message.Message.Any, R2>(
|
36
|
+
initialState: (entityId: string) => Effect.Effect<S, never, R>,
|
37
|
+
handler: (
|
38
|
+
entityId: string,
|
39
|
+
message: Msg,
|
40
|
+
stateRef: Ref.Ref<S>
|
41
|
+
) => Effect.Effect<MessageState.MessageState<Message.Message.Exit<Msg>>, never, R2>
|
42
|
+
): RecipientBehaviour.RecipientBehaviour<Msg, R | R2> {
|
43
|
+
return Effect.flatMap(RecipientBehaviourContext.entityId, (entityId) =>
|
44
|
+
pipe(
|
45
|
+
initialState(entityId),
|
46
|
+
Effect.flatMap(Ref.make),
|
47
|
+
Effect.flatMap((stateRef) =>
|
48
|
+
pipe(
|
49
|
+
Effect.context<R2>(),
|
50
|
+
Effect.map((context) => (message: Msg) =>
|
51
|
+
pipe(
|
52
|
+
handler(entityId, message, stateRef),
|
53
|
+
Effect.provide(context)
|
54
|
+
)
|
55
|
+
)
|
56
|
+
)
|
57
|
+
)
|
58
|
+
))
|
59
|
+
}
|
60
|
+
|
61
|
+
/** @internal */
|
62
|
+
export function fromInMemoryQueue<Msg extends Message.Message.Any, R>(
|
63
|
+
handler: (
|
64
|
+
entityId: string,
|
65
|
+
dequeue: Queue.Dequeue<Msg | PoisonPill.PoisonPill>,
|
66
|
+
processed: <A extends Msg>(
|
67
|
+
message: A,
|
68
|
+
value: Option.Option<Message.Message.Exit<A>>
|
69
|
+
) => Effect.Effect<void>
|
70
|
+
) => Effect.Effect<void, never, R>
|
71
|
+
): RecipientBehaviour.RecipientBehaviour<Msg, R> {
|
72
|
+
return Effect.gen(function*(_) {
|
73
|
+
const entityId = yield* _(RecipientBehaviourContext.entityId)
|
74
|
+
const messageStates = yield* _(Ref.make(HashMap.empty<string, MessageState.MessageState<any>>()))
|
75
|
+
|
76
|
+
function updateMessageState(message: Msg, state: MessageState.MessageState<any>) {
|
77
|
+
return pipe(Ref.update(messageStates, HashMap.set(PrimaryKey.value(message), state)), Effect.as(state))
|
78
|
+
}
|
79
|
+
|
80
|
+
function getMessageState(message: Msg) {
|
81
|
+
return pipe(
|
82
|
+
Ref.get(messageStates),
|
83
|
+
Effect.map(HashMap.get(PrimaryKey.value(message)))
|
84
|
+
)
|
85
|
+
}
|
86
|
+
|
87
|
+
function reply<A extends Msg>(message: A, reply: Option.Option<Message.Message.Exit<A>>) {
|
88
|
+
return updateMessageState(message, MessageState.Processed(reply))
|
89
|
+
}
|
90
|
+
|
91
|
+
return yield* _(pipe(
|
92
|
+
Deferred.make<boolean>(),
|
93
|
+
Effect.flatMap((shutdownCompleted) =>
|
94
|
+
pipe(
|
95
|
+
Effect.acquireRelease(
|
96
|
+
Queue.unbounded<Msg | PoisonPill.PoisonPill>(),
|
97
|
+
(queue) =>
|
98
|
+
pipe(
|
99
|
+
PoisonPill.make,
|
100
|
+
Effect.flatMap((msg) => Queue.offer(queue, msg)),
|
101
|
+
Effect.zipLeft(Deferred.await(shutdownCompleted)),
|
102
|
+
Effect.uninterruptible
|
103
|
+
)
|
104
|
+
),
|
105
|
+
Effect.tap((queue) =>
|
106
|
+
pipe(
|
107
|
+
Effect.logDebug("Behaviour started."),
|
108
|
+
Effect.zipRight(handler(entityId, queue, reply)),
|
109
|
+
Effect.ensuring(Deferred.succeed(shutdownCompleted, true)),
|
110
|
+
Effect.zipRight(Effect.logDebug("Behaviour exited.")),
|
111
|
+
Effect.annotateLogs("entityId", entityId),
|
112
|
+
Effect.forkDaemon
|
113
|
+
)
|
114
|
+
),
|
115
|
+
Effect.map((queue) => (message: Msg) => {
|
116
|
+
return pipe(
|
117
|
+
getMessageState(message),
|
118
|
+
Effect.flatMap(Option.match({
|
119
|
+
onNone: () =>
|
120
|
+
pipe(
|
121
|
+
Queue.offer(queue, message),
|
122
|
+
Effect.zipRight(updateMessageState(message, MessageState.Acknowledged))
|
123
|
+
),
|
124
|
+
onSome: (state) => Effect.succeed(state)
|
125
|
+
}))
|
126
|
+
)
|
127
|
+
}),
|
128
|
+
Effect.annotateLogs("entityId", entityId)
|
129
|
+
)
|
130
|
+
)
|
131
|
+
))
|
132
|
+
})
|
133
|
+
}
|
@@ -0,0 +1,70 @@
|
|
1
|
+
import * as Context from "effect/Context"
|
2
|
+
import * as Effect from "effect/Effect"
|
3
|
+
import type * as Message from "../Message.js"
|
4
|
+
import type * as RecipientAddress from "../RecipientAddress.js"
|
5
|
+
import type * as RecipientBehaviourContext from "../RecipientBehaviourContext.js"
|
6
|
+
import type * as RecipientType from "../RecipientType.js"
|
7
|
+
import type * as ShardId from "../ShardId.js"
|
8
|
+
|
9
|
+
/** @internal */
|
10
|
+
const RecipientBehaviourContextSymbolKey = "@effect/cluster/RecipientBehaviourContext"
|
11
|
+
|
12
|
+
/** @internal */
|
13
|
+
export const RecipientBehaviourContextTypeId: RecipientBehaviourContext.RecipientBehaviourContextTypeId = Symbol.for(
|
14
|
+
RecipientBehaviourContextSymbolKey
|
15
|
+
) as RecipientBehaviourContext.RecipientBehaviourContextTypeId
|
16
|
+
|
17
|
+
/** @internal */
|
18
|
+
export const recipientBehaviourContextTag = Context.GenericTag<RecipientBehaviourContext.RecipientBehaviourContext>(
|
19
|
+
RecipientBehaviourContextSymbolKey
|
20
|
+
)
|
21
|
+
|
22
|
+
/** @internal */
|
23
|
+
export function make(
|
24
|
+
args: Omit<
|
25
|
+
RecipientBehaviourContext.RecipientBehaviourContext,
|
26
|
+
RecipientBehaviourContext.RecipientBehaviourContextTypeId
|
27
|
+
>
|
28
|
+
): RecipientBehaviourContext.RecipientBehaviourContext {
|
29
|
+
return ({ [RecipientBehaviourContextTypeId]: RecipientBehaviourContextTypeId, ...args })
|
30
|
+
}
|
31
|
+
|
32
|
+
/** @internal */
|
33
|
+
export const recipientAddress: Effect.Effect<
|
34
|
+
RecipientAddress.RecipientAddress,
|
35
|
+
never,
|
36
|
+
RecipientBehaviourContext.RecipientBehaviourContext
|
37
|
+
> = Effect.map(
|
38
|
+
recipientBehaviourContextTag,
|
39
|
+
(_) => _.recipientAddress
|
40
|
+
)
|
41
|
+
|
42
|
+
/** @internal */
|
43
|
+
export const entityId: Effect.Effect<string, never, RecipientBehaviourContext.RecipientBehaviourContext> = Effect.map(
|
44
|
+
recipientAddress,
|
45
|
+
(_) => _.entityId
|
46
|
+
)
|
47
|
+
|
48
|
+
/** @internal */
|
49
|
+
export const shardId: Effect.Effect<ShardId.ShardId, never, RecipientBehaviourContext.RecipientBehaviourContext> =
|
50
|
+
Effect.map(
|
51
|
+
recipientBehaviourContextTag,
|
52
|
+
(_) => _.shardId
|
53
|
+
)
|
54
|
+
|
55
|
+
/** @internal */
|
56
|
+
export const recipientType: Effect.Effect<
|
57
|
+
RecipientType.RecipientType<Message.Message.Any>,
|
58
|
+
never,
|
59
|
+
RecipientBehaviourContext.RecipientBehaviourContext
|
60
|
+
> = Effect.map(
|
61
|
+
recipientBehaviourContextTag,
|
62
|
+
(_) => _.recipientType
|
63
|
+
)
|
64
|
+
|
65
|
+
/** @internal */
|
66
|
+
export const forkShutdown: Effect.Effect<void, never, RecipientBehaviourContext.RecipientBehaviourContext> = Effect
|
67
|
+
.flatMap(
|
68
|
+
recipientBehaviourContextTag,
|
69
|
+
(_) => _.forkShutdown
|
70
|
+
)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import * as Schema from "@effect/schema/Schema"
|
2
|
+
import * as TreeFormatter from "@effect/schema/TreeFormatter"
|
3
|
+
import * as Context from "effect/Context"
|
4
|
+
import * as Effect from "effect/Effect"
|
5
|
+
import { pipe } from "effect/Function"
|
6
|
+
import * as Layer from "effect/Layer"
|
7
|
+
import type * as Serialization from "../Serialization.js"
|
8
|
+
import * as SerializedMessage from "../SerializedMessage.js"
|
9
|
+
import * as ShardingException from "../ShardingException.js"
|
10
|
+
|
11
|
+
/** @internal */
|
12
|
+
const SerializationSymbolKey = "@effect/cluster/Serialization"
|
13
|
+
|
14
|
+
/** @internal */
|
15
|
+
export const SerializationTypeId: Serialization.SerializationTypeId = Symbol.for(
|
16
|
+
SerializationSymbolKey
|
17
|
+
) as Serialization.SerializationTypeId
|
18
|
+
|
19
|
+
/** @internal */
|
20
|
+
export const serializationTag = Context.GenericTag<Serialization.Serialization>(SerializationSymbolKey)
|
21
|
+
|
22
|
+
/** @internal */
|
23
|
+
function jsonStringify<A, I>(value: A, schema: Schema.Schema<A, I>) {
|
24
|
+
return pipe(
|
25
|
+
value,
|
26
|
+
Schema.encode(schema),
|
27
|
+
Effect.mapError((e) => new ShardingException.SerializationException({ error: TreeFormatter.formatError(e) })),
|
28
|
+
Effect.map((_) => JSON.stringify(_))
|
29
|
+
)
|
30
|
+
}
|
31
|
+
|
32
|
+
/** @internal */
|
33
|
+
function jsonParse<A, I>(value: string, schema: Schema.Schema<A, I>) {
|
34
|
+
return pipe(
|
35
|
+
Effect.sync(() => JSON.parse(value)),
|
36
|
+
Effect.flatMap(Schema.decode(schema)),
|
37
|
+
Effect.mapError((e) => new ShardingException.SerializationException({ error: TreeFormatter.formatError(e) }))
|
38
|
+
)
|
39
|
+
}
|
40
|
+
|
41
|
+
/** @internal */
|
42
|
+
export function make(
|
43
|
+
args: Omit<Serialization.Serialization, Serialization.SerializationTypeId>
|
44
|
+
): Serialization.Serialization {
|
45
|
+
return ({ ...args, [SerializationTypeId]: SerializationTypeId })
|
46
|
+
}
|
47
|
+
|
48
|
+
/** @internal */
|
49
|
+
export const json: Layer.Layer<Serialization.Serialization> = Layer.succeed(
|
50
|
+
serializationTag,
|
51
|
+
make({
|
52
|
+
encode: (schema, message) =>
|
53
|
+
pipe(
|
54
|
+
jsonStringify(message, schema),
|
55
|
+
Effect.map(SerializedMessage.make)
|
56
|
+
),
|
57
|
+
decode: (schema, body) => jsonParse(body.value, schema)
|
58
|
+
})
|
59
|
+
)
|