@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.
Files changed (375) hide show
  1. package/AtLeastOnce/package.json +6 -0
  2. package/AtLeastOnceStorage/package.json +6 -0
  3. package/Broadcaster/package.json +6 -0
  4. package/LICENSE +21 -0
  5. package/ManagerConfig/package.json +6 -0
  6. package/Message/package.json +6 -0
  7. package/MessageState/package.json +6 -0
  8. package/Messenger/package.json +6 -0
  9. package/Pod/package.json +6 -0
  10. package/PodAddress/package.json +6 -0
  11. package/Pods/package.json +6 -0
  12. package/PodsHealth/package.json +6 -0
  13. package/PoisonPill/package.json +6 -0
  14. package/README.md +3 -0
  15. package/RecipientAddress/package.json +6 -0
  16. package/RecipientBehaviour/package.json +6 -0
  17. package/RecipientBehaviourContext/package.json +6 -0
  18. package/RecipientType/package.json +6 -0
  19. package/Serialization/package.json +6 -0
  20. package/SerializedEnvelope/package.json +6 -0
  21. package/SerializedMessage/package.json +6 -0
  22. package/ShardId/package.json +6 -0
  23. package/ShardManager/package.json +6 -0
  24. package/ShardManagerClient/package.json +6 -0
  25. package/Sharding/package.json +6 -0
  26. package/ShardingConfig/package.json +6 -0
  27. package/ShardingEvent/package.json +6 -0
  28. package/ShardingException/package.json +6 -0
  29. package/ShardingRegistrationEvent/package.json +6 -0
  30. package/Storage/package.json +6 -0
  31. package/dist/cjs/AtLeastOnce.js +43 -0
  32. package/dist/cjs/AtLeastOnce.js.map +1 -0
  33. package/dist/cjs/AtLeastOnceStorage.js +48 -0
  34. package/dist/cjs/AtLeastOnceStorage.js.map +1 -0
  35. package/dist/cjs/Broadcaster.js +6 -0
  36. package/dist/cjs/Broadcaster.js.map +1 -0
  37. package/dist/cjs/ManagerConfig.js +57 -0
  38. package/dist/cjs/ManagerConfig.js.map +1 -0
  39. package/dist/cjs/Message.js +64 -0
  40. package/dist/cjs/Message.js.map +1 -0
  41. package/dist/cjs/MessageState.js +78 -0
  42. package/dist/cjs/MessageState.js.map +1 -0
  43. package/dist/cjs/Messenger.js +6 -0
  44. package/dist/cjs/Messenger.js.map +1 -0
  45. package/dist/cjs/Pod.js +101 -0
  46. package/dist/cjs/Pod.js.map +1 -0
  47. package/dist/cjs/PodAddress.js +100 -0
  48. package/dist/cjs/PodAddress.js.map +1 -0
  49. package/dist/cjs/Pods.js +58 -0
  50. package/dist/cjs/Pods.js.map +1 -0
  51. package/dist/cjs/PodsHealth.js +64 -0
  52. package/dist/cjs/PodsHealth.js.map +1 -0
  53. package/dist/cjs/PoisonPill.js +101 -0
  54. package/dist/cjs/PoisonPill.js.map +1 -0
  55. package/dist/cjs/RecipientAddress.js +102 -0
  56. package/dist/cjs/RecipientAddress.js.map +1 -0
  57. package/dist/cjs/RecipientBehaviour.js +61 -0
  58. package/dist/cjs/RecipientBehaviour.js.map +1 -0
  59. package/dist/cjs/RecipientBehaviourContext.js +87 -0
  60. package/dist/cjs/RecipientBehaviourContext.js.map +1 -0
  61. package/dist/cjs/RecipientType.js +142 -0
  62. package/dist/cjs/RecipientType.js.map +1 -0
  63. package/dist/cjs/Serialization.js +55 -0
  64. package/dist/cjs/Serialization.js.map +1 -0
  65. package/dist/cjs/SerializedEnvelope.js +111 -0
  66. package/dist/cjs/SerializedEnvelope.js.map +1 -0
  67. package/dist/cjs/SerializedMessage.js +87 -0
  68. package/dist/cjs/SerializedMessage.js.map +1 -0
  69. package/dist/cjs/ShardId.js +89 -0
  70. package/dist/cjs/ShardId.js.map +1 -0
  71. package/dist/cjs/ShardManager.js +48 -0
  72. package/dist/cjs/ShardManager.js.map +1 -0
  73. package/dist/cjs/ShardManagerClient.js +53 -0
  74. package/dist/cjs/ShardManagerClient.js.map +1 -0
  75. package/dist/cjs/Sharding.js +129 -0
  76. package/dist/cjs/Sharding.js.map +1 -0
  77. package/dist/cjs/ShardingConfig.js +64 -0
  78. package/dist/cjs/ShardingConfig.js.map +1 -0
  79. package/dist/cjs/ShardingEvent.js +72 -0
  80. package/dist/cjs/ShardingEvent.js.map +1 -0
  81. package/dist/cjs/ShardingException.js +130 -0
  82. package/dist/cjs/ShardingException.js.map +1 -0
  83. package/dist/cjs/ShardingRegistrationEvent.js +44 -0
  84. package/dist/cjs/ShardingRegistrationEvent.js.map +1 -0
  85. package/dist/cjs/Storage.js +63 -0
  86. package/dist/cjs/Storage.js.map +1 -0
  87. package/dist/cjs/index.js +88 -0
  88. package/dist/cjs/index.js.map +1 -0
  89. package/dist/cjs/internal/atLeastOnce.js +58 -0
  90. package/dist/cjs/internal/atLeastOnce.js.map +1 -0
  91. package/dist/cjs/internal/atLeastOnceStorage.js +186 -0
  92. package/dist/cjs/internal/atLeastOnceStorage.js.map +1 -0
  93. package/dist/cjs/internal/entityManager.js +191 -0
  94. package/dist/cjs/internal/entityManager.js.map +1 -0
  95. package/dist/cjs/internal/entityState.js +70 -0
  96. package/dist/cjs/internal/entityState.js.map +1 -0
  97. package/dist/cjs/internal/managerConfig.js +69 -0
  98. package/dist/cjs/internal/managerConfig.js.map +1 -0
  99. package/dist/cjs/internal/message.js +68 -0
  100. package/dist/cjs/internal/message.js.map +1 -0
  101. package/dist/cjs/internal/messageState.js +102 -0
  102. package/dist/cjs/internal/messageState.js.map +1 -0
  103. package/dist/cjs/internal/podWithMetadata.js +77 -0
  104. package/dist/cjs/internal/podWithMetadata.js.map +1 -0
  105. package/dist/cjs/internal/pods.js +58 -0
  106. package/dist/cjs/internal/pods.js.map +1 -0
  107. package/dist/cjs/internal/podsHealth.js +63 -0
  108. package/dist/cjs/internal/podsHealth.js.map +1 -0
  109. package/dist/cjs/internal/recipientBehaviour.js +75 -0
  110. package/dist/cjs/internal/recipientBehaviour.js.map +1 -0
  111. package/dist/cjs/internal/recipientBehaviourContext.js +59 -0
  112. package/dist/cjs/internal/recipientBehaviourContext.js.map +1 -0
  113. package/dist/cjs/internal/serialization.js +72 -0
  114. package/dist/cjs/internal/serialization.js.map +1 -0
  115. package/dist/cjs/internal/shardManager.js +291 -0
  116. package/dist/cjs/internal/shardManager.js.map +1 -0
  117. package/dist/cjs/internal/shardManagerClient.js +71 -0
  118. package/dist/cjs/internal/shardManagerClient.js.map +1 -0
  119. package/dist/cjs/internal/shardManagerState.js +67 -0
  120. package/dist/cjs/internal/shardManagerState.js.map +1 -0
  121. package/dist/cjs/internal/sharding.js +329 -0
  122. package/dist/cjs/internal/sharding.js.map +1 -0
  123. package/dist/cjs/internal/shardingConfig.js +79 -0
  124. package/dist/cjs/internal/shardingConfig.js.map +1 -0
  125. package/dist/cjs/internal/storage.js +75 -0
  126. package/dist/cjs/internal/storage.js.map +1 -0
  127. package/dist/cjs/internal/utils.js +92 -0
  128. package/dist/cjs/internal/utils.js.map +1 -0
  129. package/dist/dts/AtLeastOnce.d.ts +20 -0
  130. package/dist/dts/AtLeastOnce.d.ts.map +1 -0
  131. package/dist/dts/AtLeastOnceStorage.d.ts +75 -0
  132. package/dist/dts/AtLeastOnceStorage.d.ts.map +1 -0
  133. package/dist/dts/Broadcaster.d.ts +32 -0
  134. package/dist/dts/Broadcaster.d.ts.map +1 -0
  135. package/dist/dts/ManagerConfig.d.ts +61 -0
  136. package/dist/dts/ManagerConfig.d.ts.map +1 -0
  137. package/dist/dts/Message.d.ts +106 -0
  138. package/dist/dts/Message.d.ts.map +1 -0
  139. package/dist/dts/MessageState.d.ts +107 -0
  140. package/dist/dts/MessageState.d.ts.map +1 -0
  141. package/dist/dts/Messenger.d.ts +32 -0
  142. package/dist/dts/Messenger.d.ts.map +1 -0
  143. package/dist/dts/Pod.d.ts +81 -0
  144. package/dist/dts/Pod.d.ts.map +1 -0
  145. package/dist/dts/PodAddress.d.ts +80 -0
  146. package/dist/dts/PodAddress.d.ts.map +1 -0
  147. package/dist/dts/Pods.d.ts +78 -0
  148. package/dist/dts/Pods.d.ts.map +1 -0
  149. package/dist/dts/PodsHealth.d.ts +66 -0
  150. package/dist/dts/PodsHealth.d.ts.map +1 -0
  151. package/dist/dts/PoisonPill.d.ts +78 -0
  152. package/dist/dts/PoisonPill.d.ts.map +1 -0
  153. package/dist/dts/RecipientAddress.d.ts +57 -0
  154. package/dist/dts/RecipientAddress.d.ts.map +1 -0
  155. package/dist/dts/RecipientBehaviour.d.ts +72 -0
  156. package/dist/dts/RecipientBehaviour.d.ts.map +1 -0
  157. package/dist/dts/RecipientBehaviourContext.d.ts +83 -0
  158. package/dist/dts/RecipientBehaviourContext.d.ts.map +1 -0
  159. package/dist/dts/RecipientType.d.ts +96 -0
  160. package/dist/dts/RecipientType.d.ts.map +1 -0
  161. package/dist/dts/Serialization.d.ts +58 -0
  162. package/dist/dts/Serialization.d.ts.map +1 -0
  163. package/dist/dts/SerializedEnvelope.d.ts +87 -0
  164. package/dist/dts/SerializedEnvelope.d.ts.map +1 -0
  165. package/dist/dts/SerializedMessage.d.ts +66 -0
  166. package/dist/dts/SerializedMessage.d.ts.map +1 -0
  167. package/dist/dts/ShardId.d.ts +70 -0
  168. package/dist/dts/ShardId.d.ts.map +1 -0
  169. package/dist/dts/ShardManager.d.ts +44 -0
  170. package/dist/dts/ShardManager.d.ts.map +1 -0
  171. package/dist/dts/ShardManagerClient.d.ts +50 -0
  172. package/dist/dts/ShardManagerClient.d.ts.map +1 -0
  173. package/dist/dts/Sharding.d.ts +146 -0
  174. package/dist/dts/Sharding.d.ts.map +1 -0
  175. package/dist/dts/ShardingConfig.d.ts +69 -0
  176. package/dist/dts/ShardingConfig.d.ts.map +1 -0
  177. package/dist/dts/ShardingEvent.d.ts +90 -0
  178. package/dist/dts/ShardingEvent.d.ts.map +1 -0
  179. package/dist/dts/ShardingException.d.ts +125 -0
  180. package/dist/dts/ShardingException.d.ts.map +1 -0
  181. package/dist/dts/ShardingRegistrationEvent.d.ts +44 -0
  182. package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -0
  183. package/dist/dts/Storage.d.ts +78 -0
  184. package/dist/dts/Storage.d.ts.map +1 -0
  185. package/dist/dts/index.d.ts +113 -0
  186. package/dist/dts/index.d.ts.map +1 -0
  187. package/dist/dts/internal/atLeastOnce.d.ts +2 -0
  188. package/dist/dts/internal/atLeastOnce.d.ts.map +1 -0
  189. package/dist/dts/internal/atLeastOnceStorage.d.ts +2 -0
  190. package/dist/dts/internal/atLeastOnceStorage.d.ts.map +1 -0
  191. package/dist/dts/internal/entityManager.d.ts +2 -0
  192. package/dist/dts/internal/entityManager.d.ts.map +1 -0
  193. package/dist/dts/internal/entityState.d.ts +21 -0
  194. package/dist/dts/internal/entityState.d.ts.map +1 -0
  195. package/dist/dts/internal/managerConfig.d.ts +2 -0
  196. package/dist/dts/internal/managerConfig.d.ts.map +1 -0
  197. package/dist/dts/internal/message.d.ts +9 -0
  198. package/dist/dts/internal/message.d.ts.map +1 -0
  199. package/dist/dts/internal/messageState.d.ts +2 -0
  200. package/dist/dts/internal/messageState.d.ts.map +1 -0
  201. package/dist/dts/internal/podWithMetadata.d.ts +2 -0
  202. package/dist/dts/internal/podWithMetadata.d.ts.map +1 -0
  203. package/dist/dts/internal/pods.d.ts +2 -0
  204. package/dist/dts/internal/pods.d.ts.map +1 -0
  205. package/dist/dts/internal/podsHealth.d.ts +2 -0
  206. package/dist/dts/internal/podsHealth.d.ts.map +1 -0
  207. package/dist/dts/internal/recipientBehaviour.d.ts +2 -0
  208. package/dist/dts/internal/recipientBehaviour.d.ts.map +1 -0
  209. package/dist/dts/internal/recipientBehaviourContext.d.ts +2 -0
  210. package/dist/dts/internal/recipientBehaviourContext.d.ts.map +1 -0
  211. package/dist/dts/internal/serialization.d.ts +2 -0
  212. package/dist/dts/internal/serialization.d.ts.map +1 -0
  213. package/dist/dts/internal/shardManager.d.ts +12 -0
  214. package/dist/dts/internal/shardManager.d.ts.map +1 -0
  215. package/dist/dts/internal/shardManagerClient.d.ts +2 -0
  216. package/dist/dts/internal/shardManagerClient.d.ts.map +1 -0
  217. package/dist/dts/internal/shardManagerState.d.ts +26 -0
  218. package/dist/dts/internal/shardManagerState.d.ts.map +1 -0
  219. package/dist/dts/internal/sharding.d.ts +2 -0
  220. package/dist/dts/internal/sharding.d.ts.map +1 -0
  221. package/dist/dts/internal/shardingConfig.d.ts +2 -0
  222. package/dist/dts/internal/shardingConfig.d.ts.map +1 -0
  223. package/dist/dts/internal/storage.d.ts +2 -0
  224. package/dist/dts/internal/storage.d.ts.map +1 -0
  225. package/dist/dts/internal/utils.d.ts +2 -0
  226. package/dist/dts/internal/utils.d.ts.map +1 -0
  227. package/dist/esm/AtLeastOnce.js +12 -0
  228. package/dist/esm/AtLeastOnce.js.map +1 -0
  229. package/dist/esm/AtLeastOnceStorage.js +17 -0
  230. package/dist/esm/AtLeastOnceStorage.js.map +1 -0
  231. package/dist/esm/Broadcaster.js +2 -0
  232. package/dist/esm/Broadcaster.js.map +1 -0
  233. package/dist/esm/ManagerConfig.js +26 -0
  234. package/dist/esm/ManagerConfig.js.map +1 -0
  235. package/dist/esm/Message.js +33 -0
  236. package/dist/esm/Message.js.map +1 -0
  237. package/dist/esm/MessageState.js +47 -0
  238. package/dist/esm/MessageState.js.map +1 -0
  239. package/dist/esm/Messenger.js +2 -0
  240. package/dist/esm/Messenger.js.map +1 -0
  241. package/dist/esm/Pod.js +65 -0
  242. package/dist/esm/Pod.js.map +1 -0
  243. package/dist/esm/PodAddress.js +64 -0
  244. package/dist/esm/PodAddress.js.map +1 -0
  245. package/dist/esm/Pods.js +27 -0
  246. package/dist/esm/Pods.js.map +1 -0
  247. package/dist/esm/PodsHealth.js +33 -0
  248. package/dist/esm/PodsHealth.js.map +1 -0
  249. package/dist/esm/PoisonPill.js +65 -0
  250. package/dist/esm/PoisonPill.js.map +1 -0
  251. package/dist/esm/RecipientAddress.js +67 -0
  252. package/dist/esm/RecipientAddress.js.map +1 -0
  253. package/dist/esm/RecipientBehaviour.js +30 -0
  254. package/dist/esm/RecipientBehaviour.js.map +1 -0
  255. package/dist/esm/RecipientBehaviourContext.js +56 -0
  256. package/dist/esm/RecipientBehaviourContext.js.map +1 -0
  257. package/dist/esm/RecipientType.js +105 -0
  258. package/dist/esm/RecipientType.js.map +1 -0
  259. package/dist/esm/Serialization.js +24 -0
  260. package/dist/esm/Serialization.js.map +1 -0
  261. package/dist/esm/SerializedEnvelope.js +75 -0
  262. package/dist/esm/SerializedEnvelope.js.map +1 -0
  263. package/dist/esm/SerializedMessage.js +51 -0
  264. package/dist/esm/SerializedMessage.js.map +1 -0
  265. package/dist/esm/ShardId.js +54 -0
  266. package/dist/esm/ShardId.js.map +1 -0
  267. package/dist/esm/ShardManager.js +17 -0
  268. package/dist/esm/ShardManager.js.map +1 -0
  269. package/dist/esm/ShardManagerClient.js +22 -0
  270. package/dist/esm/ShardManagerClient.js.map +1 -0
  271. package/dist/esm/Sharding.js +98 -0
  272. package/dist/esm/Sharding.js.map +1 -0
  273. package/dist/esm/ShardingConfig.js +33 -0
  274. package/dist/esm/ShardingConfig.js.map +1 -0
  275. package/dist/esm/ShardingEvent.js +62 -0
  276. package/dist/esm/ShardingEvent.js.map +1 -0
  277. package/dist/esm/ShardingException.js +91 -0
  278. package/dist/esm/ShardingException.js.map +1 -0
  279. package/dist/esm/ShardingRegistrationEvent.js +36 -0
  280. package/dist/esm/ShardingRegistrationEvent.js.map +1 -0
  281. package/dist/esm/Storage.js +32 -0
  282. package/dist/esm/Storage.js.map +1 -0
  283. package/dist/esm/index.js +113 -0
  284. package/dist/esm/index.js.map +1 -0
  285. package/dist/esm/internal/atLeastOnce.js +26 -0
  286. package/dist/esm/internal/atLeastOnce.js.map +1 -0
  287. package/dist/esm/internal/atLeastOnceStorage.js +154 -0
  288. package/dist/esm/internal/atLeastOnceStorage.js.map +1 -0
  289. package/dist/esm/internal/entityManager.js +159 -0
  290. package/dist/esm/internal/entityManager.js.map +1 -0
  291. package/dist/esm/internal/entityState.js +35 -0
  292. package/dist/esm/internal/entityState.js.map +1 -0
  293. package/dist/esm/internal/managerConfig.js +38 -0
  294. package/dist/esm/internal/managerConfig.js.map +1 -0
  295. package/dist/esm/internal/message.js +32 -0
  296. package/dist/esm/internal/message.js.map +1 -0
  297. package/dist/esm/internal/messageState.js +66 -0
  298. package/dist/esm/internal/messageState.js.map +1 -0
  299. package/dist/esm/internal/podWithMetadata.js +41 -0
  300. package/dist/esm/internal/podWithMetadata.js.map +1 -0
  301. package/dist/esm/internal/pods.js +25 -0
  302. package/dist/esm/internal/pods.js.map +1 -0
  303. package/dist/esm/internal/podsHealth.js +30 -0
  304. package/dist/esm/internal/podsHealth.js.map +1 -0
  305. package/dist/esm/internal/recipientBehaviour.js +42 -0
  306. package/dist/esm/internal/recipientBehaviour.js.map +1 -0
  307. package/dist/esm/internal/recipientBehaviourContext.js +26 -0
  308. package/dist/esm/internal/recipientBehaviourContext.js.map +1 -0
  309. package/dist/esm/internal/serialization.js +39 -0
  310. package/dist/esm/internal/serialization.js.map +1 -0
  311. package/dist/esm/internal/shardManager.js +256 -0
  312. package/dist/esm/internal/shardManager.js.map +1 -0
  313. package/dist/esm/internal/shardManagerClient.js +38 -0
  314. package/dist/esm/internal/shardManagerClient.js.map +1 -0
  315. package/dist/esm/internal/shardManagerState.js +36 -0
  316. package/dist/esm/internal/shardManagerState.js.map +1 -0
  317. package/dist/esm/internal/sharding.js +288 -0
  318. package/dist/esm/internal/sharding.js.map +1 -0
  319. package/dist/esm/internal/shardingConfig.js +47 -0
  320. package/dist/esm/internal/shardingConfig.js.map +1 -0
  321. package/dist/esm/internal/storage.js +42 -0
  322. package/dist/esm/internal/storage.js.map +1 -0
  323. package/dist/esm/internal/utils.js +56 -0
  324. package/dist/esm/internal/utils.js.map +1 -0
  325. package/dist/esm/package.json +4 -0
  326. package/package.json +259 -0
  327. package/src/AtLeastOnce.ts +28 -0
  328. package/src/AtLeastOnceStorage.ts +96 -0
  329. package/src/Broadcaster.ts +48 -0
  330. package/src/ManagerConfig.ts +67 -0
  331. package/src/Message.ts +132 -0
  332. package/src/MessageState.ts +126 -0
  333. package/src/Messenger.ts +40 -0
  334. package/src/Pod.ts +95 -0
  335. package/src/PodAddress.ts +94 -0
  336. package/src/Pods.ts +100 -0
  337. package/src/PodsHealth.ts +74 -0
  338. package/src/PoisonPill.ts +105 -0
  339. package/src/RecipientAddress.ts +72 -0
  340. package/src/RecipientBehaviour.ts +108 -0
  341. package/src/RecipientBehaviourContext.ts +101 -0
  342. package/src/RecipientType.ts +134 -0
  343. package/src/Serialization.ts +72 -0
  344. package/src/SerializedEnvelope.ts +109 -0
  345. package/src/SerializedMessage.ts +82 -0
  346. package/src/ShardId.ts +79 -0
  347. package/src/ShardManager.ts +53 -0
  348. package/src/ShardManagerClient.ts +57 -0
  349. package/src/Sharding.ts +214 -0
  350. package/src/ShardingConfig.ts +76 -0
  351. package/src/ShardingEvent.ts +121 -0
  352. package/src/ShardingException.ts +151 -0
  353. package/src/ShardingRegistrationEvent.ts +62 -0
  354. package/src/Storage.ts +92 -0
  355. package/src/index.ts +139 -0
  356. package/src/internal/atLeastOnce.ts +59 -0
  357. package/src/internal/atLeastOnceStorage.ts +218 -0
  358. package/src/internal/entityManager.ts +404 -0
  359. package/src/internal/entityState.ts +64 -0
  360. package/src/internal/managerConfig.ts +84 -0
  361. package/src/internal/message.ts +64 -0
  362. package/src/internal/messageState.ts +98 -0
  363. package/src/internal/podWithMetadata.ts +72 -0
  364. package/src/internal/pods.ts +29 -0
  365. package/src/internal/podsHealth.ts +39 -0
  366. package/src/internal/recipientBehaviour.ts +133 -0
  367. package/src/internal/recipientBehaviourContext.ts +70 -0
  368. package/src/internal/serialization.ts +59 -0
  369. package/src/internal/shardManager.ts +593 -0
  370. package/src/internal/shardManagerClient.ts +49 -0
  371. package/src/internal/shardManagerState.ts +80 -0
  372. package/src/internal/sharding.ts +793 -0
  373. package/src/internal/shardingConfig.ts +97 -0
  374. package/src/internal/storage.ts +60 -0
  375. package/src/internal/utils.ts +54 -0
@@ -0,0 +1,404 @@
1
+ import * as Clock from "effect/Clock"
2
+ import * as Duration from "effect/Duration"
3
+ import * as Effect from "effect/Effect"
4
+ import * as Exit from "effect/Exit"
5
+ import * as Fiber from "effect/Fiber"
6
+ import { pipe } from "effect/Function"
7
+ import * as HashMap from "effect/HashMap"
8
+ import * as HashSet from "effect/HashSet"
9
+ import * as Option from "effect/Option"
10
+ import * as Scope from "effect/Scope"
11
+ import * as RefSynchronized from "effect/SynchronizedRef"
12
+ import * as Message from "../Message.js"
13
+ import * as MessageState from "../MessageState.js"
14
+ import type * as RecipientAddress from "../RecipientAddress.js"
15
+ import type * as RecipientBehaviour from "../RecipientBehaviour.js"
16
+ import * as RecipientBehaviourContext from "../RecipientBehaviourContext.js"
17
+ import type * as RecipientType from "../RecipientType.js"
18
+ import type * as Serialization from "../Serialization.js"
19
+ import type * as SerializedEnvelope from "../SerializedEnvelope.js"
20
+ import type * as SerializedMessage from "../SerializedMessage.js"
21
+ import type * as ShardId from "../ShardId.js"
22
+ import type * as Sharding from "../Sharding.js"
23
+ import type * as ShardingConfig from "../ShardingConfig.js"
24
+ import * as ShardingException from "../ShardingException.js"
25
+ import * as EntityState from "./entityState.js"
26
+
27
+ /** @internal */
28
+ const EntityManagerSymbolKey = "@effect/cluster/EntityManager"
29
+
30
+ /** @internal */
31
+ export const EntityManagerTypeId = Symbol.for(
32
+ EntityManagerSymbolKey
33
+ )
34
+
35
+ /** @internal */
36
+ export type EntityManagerTypeId = typeof EntityManagerTypeId
37
+
38
+ /** @internal */
39
+ export interface EntityManager {
40
+ readonly [EntityManagerTypeId]: EntityManagerTypeId
41
+
42
+ /** @internal */
43
+ readonly sendAndGetState: (
44
+ envelope: SerializedEnvelope.SerializedEnvelope
45
+ ) => Effect.Effect<
46
+ MessageState.MessageState<SerializedMessage.SerializedMessage>,
47
+ | ShardingException.EntityNotManagedByThisPodException
48
+ | ShardingException.PodUnavailableException
49
+ | ShardingException.ExceptionWhileOfferingMessageException
50
+ | ShardingException.SerializationException
51
+ >
52
+
53
+ /** @internal */
54
+ readonly terminateEntitiesOnShards: (
55
+ shards: HashSet.HashSet<ShardId.ShardId>
56
+ ) => Effect.Effect<void>
57
+
58
+ /** @internal */
59
+ readonly terminateAllEntities: Effect.Effect<void>
60
+ }
61
+
62
+ /** @internal */
63
+ export function make<Msg extends Message.Message.Any, R>(
64
+ recipientType: RecipientType.RecipientType<Msg>,
65
+ recipientBehaviour: RecipientBehaviour.RecipientBehaviour<Msg, R>,
66
+ sharding: Sharding.Sharding,
67
+ config: ShardingConfig.ShardingConfig,
68
+ serialization: Serialization.Serialization,
69
+ options: RecipientBehaviour.EntityBehaviourOptions = {}
70
+ ) {
71
+ return Effect.gen(function*(_) {
72
+ const entityMaxIdle = options.entityMaxIdleTime || Option.none()
73
+ const env = yield* _(Effect.context<Exclude<R, RecipientBehaviourContext.RecipientBehaviourContext>>())
74
+ const entityStates = yield* _(
75
+ RefSynchronized.make<
76
+ HashMap.HashMap<
77
+ RecipientAddress.RecipientAddress,
78
+ EntityState.EntityState
79
+ >
80
+ >(HashMap.empty())
81
+ )
82
+
83
+ function startExpirationFiber(recipientAddress: RecipientAddress.RecipientAddress) {
84
+ const maxIdleMillis = pipe(
85
+ entityMaxIdle,
86
+ Option.getOrElse(() => config.entityMaxIdleTime),
87
+ Duration.toMillis
88
+ )
89
+
90
+ function sleep(duration: number): Effect.Effect<void> {
91
+ return pipe(
92
+ Effect.Do,
93
+ Effect.zipLeft(Clock.sleep(Duration.millis(duration))),
94
+ Effect.bind("cdt", () => Clock.currentTimeMillis),
95
+ Effect.bind("map", () => RefSynchronized.get(entityStates)),
96
+ Effect.let("lastReceivedAt", ({ map }) =>
97
+ pipe(
98
+ HashMap.get(map, recipientAddress),
99
+ Option.map((_) => _.lastReceivedAt),
100
+ Option.getOrElse(() => 0)
101
+ )),
102
+ Effect.let("remaining", ({ cdt, lastReceivedAt }) => (maxIdleMillis - cdt + lastReceivedAt)),
103
+ Effect.tap((_) => _.remaining > 0 ? sleep(_.remaining) : Effect.void)
104
+ )
105
+ }
106
+
107
+ return pipe(
108
+ sleep(maxIdleMillis),
109
+ Effect.zipRight(forkEntityTermination(recipientAddress)),
110
+ Effect.asVoid,
111
+ Effect.interruptible,
112
+ Effect.annotateLogs("entityId", recipientAddress),
113
+ Effect.annotateLogs("recipientType", recipientType.name),
114
+ Effect.forkDaemon
115
+ )
116
+ }
117
+
118
+ /**
119
+ * Performs proper termination of the entity, interrupting the expiration timer, closing the scope and failing pending replies
120
+ */
121
+ function terminateEntity(recipientAddress: RecipientAddress.RecipientAddress) {
122
+ return pipe(
123
+ // get the things to cleanup
124
+ RefSynchronized.get(
125
+ entityStates
126
+ ),
127
+ Effect.map(HashMap.get(recipientAddress)),
128
+ Effect.flatMap(Option.match({
129
+ // there is no entity state to cleanup
130
+ onNone: () => Effect.void,
131
+ // found it!
132
+ onSome: (entityState) =>
133
+ pipe(
134
+ // interrupt the expiration timer
135
+ Fiber.interrupt(entityState.expirationFiber),
136
+ // close the scope of the entity,
137
+ Effect.ensuring(Scope.close(entityState.executionScope, Exit.void)),
138
+ // remove the entry from the map
139
+ Effect.ensuring(RefSynchronized.update(entityStates, HashMap.remove(recipientAddress))),
140
+ // log error if happens
141
+ Effect.catchAllCause(Effect.logError),
142
+ Effect.asVoid,
143
+ Effect.annotateLogs("entityId", recipientAddress.entityId),
144
+ Effect.annotateLogs("recipientType", recipientAddress.recipientTypeName)
145
+ )
146
+ }))
147
+ )
148
+ }
149
+
150
+ /**
151
+ * Begins entity termination (if needed) and return the fiber to wait for completed termination (if any)
152
+ */
153
+ function forkEntityTermination(
154
+ recipientAddress: RecipientAddress.RecipientAddress
155
+ ): Effect.Effect<Option.Option<Fiber.RuntimeFiber<void, never>>> {
156
+ return RefSynchronized.modifyEffect(entityStates, (entityStatesMap) =>
157
+ pipe(
158
+ HashMap.get(entityStatesMap, recipientAddress),
159
+ Option.match({
160
+ // if no entry is found, the entity has succefully shut down
161
+ onNone: () => Effect.succeed([Option.none(), entityStatesMap] as const),
162
+ // there is an entry, so we should begin termination
163
+ onSome: (entityState) =>
164
+ pipe(
165
+ entityState.terminationFiber,
166
+ Option.match({
167
+ // termination has already begun, keep everything as-is
168
+ onSome: () => Effect.succeed([entityState.terminationFiber, entityStatesMap] as const),
169
+ // begin to terminate the queue
170
+ onNone: () =>
171
+ pipe(
172
+ terminateEntity(recipientAddress),
173
+ Effect.forkDaemon,
174
+ Effect.map((terminationFiber) =>
175
+ [
176
+ Option.some(terminationFiber),
177
+ HashMap.modify(
178
+ entityStatesMap,
179
+ recipientAddress,
180
+ EntityState.withTerminationFiber(terminationFiber)
181
+ )
182
+ ] as const
183
+ )
184
+ )
185
+ })
186
+ )
187
+ })
188
+ ))
189
+ }
190
+
191
+ function getOrCreateEntityState(
192
+ recipientAddress: RecipientAddress.RecipientAddress
193
+ ): Effect.Effect<
194
+ Option.Option<EntityState.EntityState>,
195
+ ShardingException.EntityNotManagedByThisPodException
196
+ > {
197
+ return RefSynchronized.modifyEffect(entityStates, (map) =>
198
+ pipe(
199
+ HashMap.get(map, recipientAddress),
200
+ Option.match({
201
+ onSome: (entityState) =>
202
+ pipe(
203
+ entityState.terminationFiber,
204
+ Option.match({
205
+ // offer exists, delay the interruption fiber and return the offer
206
+ onNone: () =>
207
+ pipe(
208
+ Clock.currentTimeMillis,
209
+ Effect.map(
210
+ (cdt) =>
211
+ [
212
+ Option.some(entityState),
213
+ HashMap.modify(map, recipientAddress, EntityState.withLastReceivedAd(cdt))
214
+ ] as const
215
+ )
216
+ ),
217
+ // the queue is shutting down, stash and retry
218
+ onSome: () => Effect.succeed([Option.none(), map] as const)
219
+ })
220
+ ),
221
+ onNone: () =>
222
+ Effect.flatMap(sharding.isShuttingDown, (isGoingDown) => {
223
+ if (isGoingDown) {
224
+ // don't start any fiber while sharding is shutting down
225
+ return Effect.fail(new ShardingException.EntityNotManagedByThisPodException({ recipientAddress }))
226
+ } else {
227
+ // offer doesn't exist, create a new one
228
+ return Effect.gen(function*(_) {
229
+ const executionScope = yield* _(Scope.make())
230
+ const expirationFiber = yield* _(startExpirationFiber(recipientAddress))
231
+ const cdt = yield* _(Clock.currentTimeMillis)
232
+ const forkShutdown = pipe(forkEntityTermination(recipientAddress), Effect.asVoid)
233
+ const shardId = sharding.getShardId(recipientAddress)
234
+
235
+ const sendAndGetState = yield* _(pipe(
236
+ recipientBehaviour,
237
+ Effect.map((offer) => (envelope: SerializedEnvelope.SerializedEnvelope) =>
238
+ pipe(
239
+ serialization.decode(recipientType.schema, envelope.body),
240
+ Effect.flatMap((message) =>
241
+ pipe(
242
+ offer(message),
243
+ Effect.flatMap((_) =>
244
+ MessageState.mapEffect(
245
+ _,
246
+ (value) => serialization.encode(Message.exitSchema(message), value)
247
+ )
248
+ )
249
+ )
250
+ )
251
+ )
252
+ ),
253
+ Scope.extend(executionScope),
254
+ Effect.provideService(
255
+ RecipientBehaviourContext.RecipientBehaviourContext,
256
+ RecipientBehaviourContext.make({
257
+ recipientAddress,
258
+ shardId,
259
+ recipientType: recipientType as any,
260
+ forkShutdown
261
+ })
262
+ ),
263
+ Effect.provide(env)
264
+ ))
265
+
266
+ const entityState = EntityState.make({
267
+ sendAndGetState,
268
+ expirationFiber,
269
+ executionScope,
270
+ terminationFiber: Option.none(),
271
+ lastReceivedAt: cdt
272
+ })
273
+
274
+ return [
275
+ Option.some(entityState),
276
+ HashMap.set(
277
+ map,
278
+ recipientAddress,
279
+ entityState
280
+ )
281
+ ] as const
282
+ })
283
+ }
284
+ })
285
+ })
286
+ ))
287
+ }
288
+
289
+ function sendAndGetState(
290
+ envelope: SerializedEnvelope.SerializedEnvelope
291
+ ): Effect.Effect<
292
+ MessageState.MessageState<SerializedMessage.SerializedMessage>,
293
+ | ShardingException.EntityNotManagedByThisPodException
294
+ | ShardingException.PodUnavailableException
295
+ | ShardingException.ExceptionWhileOfferingMessageException
296
+ | ShardingException.SerializationException
297
+ > {
298
+ return pipe(
299
+ Effect.Do,
300
+ Effect.tap(() => {
301
+ // first, verify that this entity should be handled by this pod
302
+ if (recipientType._tag === "EntityType") {
303
+ return Effect.asVoid(Effect.unlessEffect(
304
+ Effect.fail(
305
+ new ShardingException.EntityNotManagedByThisPodException({
306
+ recipientAddress: envelope.recipientAddress
307
+ })
308
+ ),
309
+ sharding.isEntityOnLocalShards(envelope.recipientAddress)
310
+ ))
311
+ } else if (recipientType._tag === "TopicType") {
312
+ return Effect.void
313
+ }
314
+ return Effect.die("Unhandled recipientType")
315
+ }),
316
+ Effect.bind("maybeEntityState", () => getOrCreateEntityState(envelope.recipientAddress)),
317
+ Effect.flatMap((_) =>
318
+ pipe(
319
+ _.maybeEntityState,
320
+ Option.match({
321
+ onNone: () =>
322
+ pipe(
323
+ Effect.sleep(Duration.millis(100)),
324
+ Effect.flatMap(() => sendAndGetState(envelope))
325
+ ),
326
+ onSome: (entityState) => {
327
+ return entityState.sendAndGetState(envelope)
328
+ }
329
+ })
330
+ )
331
+ )
332
+ )
333
+ }
334
+
335
+ const terminateAllEntities = pipe(
336
+ RefSynchronized.get(entityStates),
337
+ Effect.map(HashMap.keySet),
338
+ Effect.flatMap(terminateEntities)
339
+ )
340
+
341
+ function terminateEntities(
342
+ entitiesToTerminate: HashSet.HashSet<
343
+ RecipientAddress.RecipientAddress
344
+ >
345
+ ) {
346
+ return pipe(
347
+ entitiesToTerminate,
348
+ Effect.forEach(
349
+ (recipientAddress) =>
350
+ pipe(
351
+ forkEntityTermination(recipientAddress),
352
+ Effect.flatMap((_) =>
353
+ Option.match(_, {
354
+ onNone: () => Effect.void,
355
+ onSome: (terminationFiber) =>
356
+ pipe(
357
+ Fiber.await(terminationFiber),
358
+ Effect.timeout(config.entityTerminationTimeout),
359
+ Effect.match({
360
+ onFailure: () =>
361
+ Effect.logError(
362
+ `Entity ${recipientAddress} termination is taking more than expected entityTerminationTimeout (${
363
+ Duration.toMillis(config.entityTerminationTimeout)
364
+ }ms).`
365
+ ),
366
+ onSuccess: () =>
367
+ Effect.logDebug(
368
+ `Entity ${recipientAddress} cleaned up.`
369
+ )
370
+ }),
371
+ Effect.asVoid
372
+ )
373
+ })
374
+ )
375
+ ),
376
+ { concurrency: "inherit" }
377
+ ),
378
+ Effect.asVoid
379
+ )
380
+ }
381
+
382
+ function terminateEntitiesOnShards(shards: HashSet.HashSet<ShardId.ShardId>) {
383
+ return pipe(
384
+ RefSynchronized.modify(entityStates, (entities) => [
385
+ HashMap.filter(
386
+ entities,
387
+ (_, recipientAddress) => HashSet.has(shards, sharding.getShardId(recipientAddress))
388
+ ),
389
+ entities
390
+ ]),
391
+ Effect.map(HashMap.keySet),
392
+ Effect.flatMap(terminateEntities)
393
+ )
394
+ }
395
+
396
+ const self: EntityManager = {
397
+ [EntityManagerTypeId]: EntityManagerTypeId,
398
+ sendAndGetState,
399
+ terminateAllEntities,
400
+ terminateEntitiesOnShards
401
+ }
402
+ return self
403
+ })
404
+ }
@@ -0,0 +1,64 @@
1
+ import * as Data from "effect/Data"
2
+ import type * as Effect from "effect/Effect"
3
+ import type * as Fiber from "effect/Fiber"
4
+ import * as Option from "effect/Option"
5
+ import type * as Scope from "effect/Scope"
6
+ import type * as MessageState from "../MessageState.js"
7
+ import type * as SerializedEnvelope from "../SerializedEnvelope.js"
8
+ import type * as SerializedMessage from "../SerializedMessage.js"
9
+ import type * as ShardingException from "../ShardingException.js"
10
+
11
+ /** @internal */
12
+ const EntityStateSymbolKey = "@effect/cluster/EntityState"
13
+
14
+ /** @internal */
15
+ export const EntityStateTypeId = Symbol.for(EntityStateSymbolKey)
16
+
17
+ /** @internal */
18
+ export type EntityStateTypeId = typeof EntityStateTypeId
19
+
20
+ /**
21
+ * @since 1.0.0
22
+ * @category models
23
+ */
24
+ export interface EntityState {
25
+ readonly [EntityStateTypeId]: EntityStateTypeId
26
+ readonly sendAndGetState: (
27
+ envelope: SerializedEnvelope.SerializedEnvelope
28
+ ) => Effect.Effect<
29
+ MessageState.MessageState<SerializedMessage.SerializedMessage>,
30
+ ShardingException.ExceptionWhileOfferingMessageException | ShardingException.SerializationException
31
+ >
32
+ readonly expirationFiber: Fiber.RuntimeFiber<void, never>
33
+ readonly executionScope: Scope.CloseableScope
34
+ readonly terminationFiber: Option.Option<Fiber.RuntimeFiber<void, never>>
35
+ readonly lastReceivedAt: number
36
+ }
37
+
38
+ /** @internal */
39
+ export function make(
40
+ data: Omit<EntityState, EntityStateTypeId>
41
+ ): EntityState {
42
+ return Data.struct({ [EntityStateTypeId]: EntityStateTypeId, ...data })
43
+ }
44
+
45
+ /** @internal */
46
+ export function withTerminationFiber(
47
+ terminationFiber: Fiber.RuntimeFiber<void, never>
48
+ ): (entityState: EntityState) => EntityState {
49
+ return (entityState) => ({ ...entityState, terminationFiber: Option.some(terminationFiber) })
50
+ }
51
+
52
+ /** @internal */
53
+ export function withExpirationFiber(
54
+ expirationFiber: Fiber.RuntimeFiber<void, never>
55
+ ): (entityState: EntityState) => EntityState {
56
+ return (entityState) => ({ ...entityState, expirationFiber })
57
+ }
58
+
59
+ /** @internal */
60
+ export function withLastReceivedAd(
61
+ lastReceivedAt: number
62
+ ): (entityState: EntityState) => EntityState {
63
+ return (entityState) => ({ ...entityState, lastReceivedAt })
64
+ }
@@ -0,0 +1,84 @@
1
+ import * as Config from "effect/Config"
2
+ import type * as ConfigError from "effect/ConfigError"
3
+ import * as Context from "effect/Context"
4
+ import * as Duration from "effect/Duration"
5
+ import { pipe } from "effect/Function"
6
+ import * as Layer from "effect/Layer"
7
+ import type * as ManagerConfig from "../ManagerConfig.js"
8
+
9
+ /** @internal */
10
+ const ManagerConfigSymbolKey = "@effect/cluster/ManagerConfig"
11
+
12
+ /** @internal */
13
+ export const ManagerConfigTypeId: ManagerConfig.ManagerConfigTypeId = Symbol.for(
14
+ ManagerConfigSymbolKey
15
+ ) as ManagerConfig.ManagerConfigTypeId
16
+
17
+ /** @internal */
18
+ export const managerConfigTag: Context.Tag<ManagerConfig.ManagerConfig, ManagerConfig.ManagerConfig> = Context
19
+ .GenericTag(ManagerConfigSymbolKey)
20
+
21
+ /** @internal */
22
+ const defaultValues: ManagerConfig.ManagerConfig = {
23
+ numberOfShards: 300,
24
+ apiPort: 8080,
25
+ rebalanceInterval: Duration.seconds(20),
26
+ rebalanceRetryInterval: Duration.seconds(10),
27
+ pingTimeout: Duration.seconds(3),
28
+ persistRetryInterval: Duration.seconds(3),
29
+ persistRetryCount: 100,
30
+ rebalanceRate: 2 / 100
31
+ }
32
+
33
+ /** @internal */
34
+ export const defaults: Layer.Layer<ManagerConfig.ManagerConfig> = Layer.succeed(managerConfigTag, defaultValues)
35
+
36
+ /** @internal */
37
+ const config: Config.Config<ManagerConfig.ManagerConfig> = Config.all({
38
+ numberOfShards: pipe(
39
+ Config.number("NUMBER_OF_SHARDS"),
40
+ Config.withDefault(defaultValues.numberOfShards),
41
+ Config.withDescription("Number of shards")
42
+ ),
43
+ apiPort: pipe(
44
+ Config.integer("API_PORT"),
45
+ Config.withDefault(defaultValues.apiPort),
46
+ Config.withDescription("API port")
47
+ ),
48
+ rebalanceInterval: pipe(
49
+ Config.map(Config.number("REBALANCE_INTERVAL"), Duration.millis),
50
+ Config.withDefault(defaultValues.rebalanceInterval),
51
+ Config.withDescription("Interval of rebalance")
52
+ ),
53
+ rebalanceRetryInterval: pipe(
54
+ Config.map(Config.number("REBALANCE_RETRY_INTERVAL"), Duration.millis),
55
+ Config.withDefault(defaultValues.rebalanceRetryInterval),
56
+ Config.withDescription("Retry interval of rebalance")
57
+ ),
58
+ pingTimeout: pipe(
59
+ Config.map(Config.number("PING_TIMEOUT"), Duration.millis),
60
+ Config.withDefault(defaultValues.pingTimeout),
61
+ Config.withDescription("Ping timeout")
62
+ ),
63
+ persistRetryInterval: pipe(
64
+ Config.map(Config.number("PERSIST_RETRY_INTERVAL"), Duration.millis),
65
+ Config.withDefault(defaultValues.persistRetryInterval),
66
+ Config.withDescription("Persist retry interval")
67
+ ),
68
+ persistRetryCount: pipe(
69
+ Config.number("PERSIST_RETRY_COUNT"),
70
+ Config.withDefault(defaultValues.persistRetryCount),
71
+ Config.withDescription("Persist retry count")
72
+ ),
73
+ rebalanceRate: pipe(
74
+ Config.number("REBALANCE_RATE"),
75
+ Config.withDefault(defaultValues.rebalanceRate),
76
+ Config.withDescription("Rebalance rate")
77
+ )
78
+ })
79
+
80
+ /** @internal */
81
+ export const fromConfig: Layer.Layer<ManagerConfig.ManagerConfig, ConfigError.ConfigError> = Layer.effect(
82
+ managerConfigTag,
83
+ config
84
+ )
@@ -0,0 +1,64 @@
1
+ import * as Schema from "@effect/schema/Schema"
2
+ import * as Serializable from "@effect/schema/Serializable"
3
+ import * as PrimaryKey from "effect/PrimaryKey"
4
+ import type * as Types from "effect/Types"
5
+ import type * as Message from "../Message.js"
6
+
7
+ /** @internal */
8
+ export function isMessageWithResult(value: unknown): value is Message.Message<unknown, unknown, unknown, unknown> {
9
+ return (
10
+ typeof value === "object" && value !== null &&
11
+ Serializable.symbolResult in value
12
+ )
13
+ }
14
+
15
+ /** @internal */
16
+ export function exitSchema<A extends Message.Message.Any>(
17
+ message: A
18
+ ): Schema.Schema<Message.Message.Exit<A>, unknown> {
19
+ return Serializable.exitSchema(message as any) as any
20
+ }
21
+
22
+ /** @internal */
23
+ export function successSchema<A extends Message.Message.Any>(
24
+ message: A
25
+ ): Schema.Schema<Message.Message.Success<A>, unknown> {
26
+ return Serializable.successSchema(message as any) as any
27
+ }
28
+
29
+ /** @internal */
30
+ export function failureSchema<A extends Message.Message.Any>(
31
+ message: A
32
+ ): Schema.Schema<Message.Message.Error<A>, unknown> {
33
+ return Serializable.failureSchema(message as any) as any
34
+ }
35
+
36
+ /**
37
+ * @since 1.0.0
38
+ * @category schemas
39
+ */
40
+ export const TaggedMessage_ = <Self>() =>
41
+ <Tag extends string, E, IE, A, IA, Fields extends Schema.Struct.Fields>(
42
+ tag: Tag,
43
+ failure: Schema.Schema<E, IE, never>,
44
+ success: Schema.Schema<A, IA, never>,
45
+ fields: Fields,
46
+ messageToId: (message: Schema.Struct.Encoded<Fields>) => string
47
+ ): Message.TaggedMessageConstructor<
48
+ Tag,
49
+ Self,
50
+ Schema.Schema.Context<Fields[keyof Fields]>,
51
+ Types.Simplify<Schema.Struct.Encoded<Fields>>,
52
+ Types.Simplify<Schema.Struct.Type<Fields>>,
53
+ IE,
54
+ E,
55
+ IA,
56
+ A
57
+ > => {
58
+ return class extends (Schema.TaggedRequest<{}>()(tag, failure, success, fields) as any) {
59
+ constructor(props: any, disableValidation?: boolean) {
60
+ super(props, disableValidation)
61
+ ;(this as any)[PrimaryKey.symbol] = () => messageToId(this as any)
62
+ }
63
+ } as any
64
+ }