@effect/cluster 0.28.3 → 0.29.0

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 (626) hide show
  1. package/ClusterError/package.json +6 -0
  2. package/ClusterMetrics/package.json +6 -0
  3. package/ClusterSchema/package.json +6 -0
  4. package/DeliverAt/package.json +6 -0
  5. package/Entity/package.json +6 -0
  6. package/EntityAddress/package.json +6 -0
  7. package/EntityId/package.json +6 -0
  8. package/EntityType/package.json +6 -0
  9. package/Envelope/package.json +6 -0
  10. package/HttpCommon/package.json +6 -0
  11. package/HttpRunner/package.json +6 -0
  12. package/HttpShardManager/package.json +6 -0
  13. package/MachineId/package.json +6 -0
  14. package/MessageStorage/package.json +6 -0
  15. package/README.md +2 -2
  16. package/Reply/package.json +6 -0
  17. package/Runner/package.json +6 -0
  18. package/RunnerAddress/package.json +6 -0
  19. package/RunnerHealth/package.json +6 -0
  20. package/RunnerServer/package.json +6 -0
  21. package/Runners/package.json +6 -0
  22. package/ShardStorage/package.json +6 -0
  23. package/Singleton/package.json +6 -0
  24. package/SingletonAddress/package.json +6 -0
  25. package/Snowflake/package.json +6 -0
  26. package/SocketRunner/package.json +6 -0
  27. package/SocketShardManager/package.json +6 -0
  28. package/SqlMessageStorage/package.json +6 -0
  29. package/SqlShardStorage/package.json +6 -0
  30. package/SynchronizedClock/package.json +6 -0
  31. package/dist/cjs/ClusterError.js +180 -0
  32. package/dist/cjs/ClusterError.js.map +1 -0
  33. package/dist/cjs/ClusterMetrics.js +63 -0
  34. package/dist/cjs/ClusterMetrics.js.map +1 -0
  35. package/dist/cjs/{Pods.js → ClusterSchema.js} +10 -22
  36. package/dist/cjs/ClusterSchema.js.map +1 -0
  37. package/dist/cjs/DeliverAt.js +30 -0
  38. package/dist/cjs/DeliverAt.js.map +1 -0
  39. package/dist/cjs/Entity.js +187 -0
  40. package/dist/cjs/Entity.js.map +1 -0
  41. package/dist/cjs/EntityAddress.js +54 -0
  42. package/dist/cjs/EntityAddress.js.map +1 -0
  43. package/dist/cjs/{AtLeastOnce.js → EntityId.js} +6 -7
  44. package/dist/cjs/EntityId.js.map +1 -0
  45. package/dist/cjs/{ShardManagerClient.js → EntityType.js} +5 -16
  46. package/dist/cjs/EntityType.js.map +1 -0
  47. package/dist/cjs/Envelope.js +168 -0
  48. package/dist/cjs/Envelope.js.map +1 -0
  49. package/dist/cjs/HttpCommon.js +49 -0
  50. package/dist/cjs/HttpCommon.js.map +1 -0
  51. package/dist/cjs/HttpRunner.js +108 -0
  52. package/dist/cjs/HttpRunner.js.map +1 -0
  53. package/dist/cjs/HttpShardManager.js +140 -0
  54. package/dist/cjs/HttpShardManager.js.map +1 -0
  55. package/dist/cjs/{AtLeastOnceStorage.js → MachineId.js} +11 -9
  56. package/dist/cjs/MachineId.js.map +1 -0
  57. package/dist/cjs/Message.js +99 -18
  58. package/dist/cjs/Message.js.map +1 -1
  59. package/dist/cjs/MessageStorage.js +356 -0
  60. package/dist/cjs/MessageStorage.js.map +1 -0
  61. package/dist/cjs/Reply.js +200 -0
  62. package/dist/cjs/Reply.js.map +1 -0
  63. package/dist/cjs/Runner.js +79 -0
  64. package/dist/cjs/Runner.js.map +1 -0
  65. package/dist/cjs/RunnerAddress.js +63 -0
  66. package/dist/cjs/RunnerAddress.js.map +1 -0
  67. package/dist/cjs/RunnerHealth.js +68 -0
  68. package/dist/cjs/RunnerHealth.js.map +1 -0
  69. package/dist/cjs/RunnerServer.js +125 -0
  70. package/dist/cjs/RunnerServer.js.map +1 -0
  71. package/dist/cjs/Runners.js +344 -0
  72. package/dist/cjs/Runners.js.map +1 -0
  73. package/dist/cjs/ShardId.js +7 -46
  74. package/dist/cjs/ShardId.js.map +1 -1
  75. package/dist/cjs/ShardManager.js +493 -8
  76. package/dist/cjs/ShardManager.js.map +1 -1
  77. package/dist/cjs/ShardStorage.js +139 -0
  78. package/dist/cjs/ShardStorage.js.map +1 -0
  79. package/dist/cjs/Sharding.js +732 -88
  80. package/dist/cjs/Sharding.js.map +1 -1
  81. package/dist/cjs/ShardingConfig.js +85 -18
  82. package/dist/cjs/ShardingConfig.js.map +1 -1
  83. package/dist/cjs/ShardingRegistrationEvent.js +26 -32
  84. package/dist/cjs/ShardingRegistrationEvent.js.map +1 -1
  85. package/dist/cjs/{ManagerConfig.js → Singleton.js} +11 -20
  86. package/dist/cjs/Singleton.js.map +1 -0
  87. package/dist/cjs/SingletonAddress.js +50 -0
  88. package/dist/cjs/SingletonAddress.js.map +1 -0
  89. package/dist/cjs/Snowflake.js +133 -0
  90. package/dist/cjs/Snowflake.js.map +1 -0
  91. package/dist/cjs/SocketRunner.js +40 -0
  92. package/dist/cjs/SocketRunner.js.map +1 -0
  93. package/dist/cjs/SocketShardManager.js +33 -0
  94. package/dist/cjs/SocketShardManager.js.map +1 -0
  95. package/dist/cjs/SqlMessageStorage.js +668 -0
  96. package/dist/cjs/SqlMessageStorage.js.map +1 -0
  97. package/dist/cjs/SqlShardStorage.js +228 -0
  98. package/dist/cjs/SqlShardStorage.js.map +1 -0
  99. package/dist/cjs/SynchronizedClock.js +66 -0
  100. package/dist/cjs/SynchronizedClock.js.map +1 -0
  101. package/dist/cjs/index.js +57 -45
  102. package/dist/cjs/internal/entityManager.js +311 -143
  103. package/dist/cjs/internal/entityManager.js.map +1 -1
  104. package/dist/cjs/internal/entityReaper.js +47 -0
  105. package/dist/cjs/internal/entityReaper.js.map +1 -0
  106. package/dist/cjs/internal/hash.js +20 -0
  107. package/dist/cjs/internal/hash.js.map +1 -0
  108. package/dist/cjs/internal/interruptors.js +9 -0
  109. package/dist/cjs/internal/interruptors.js.map +1 -0
  110. package/dist/cjs/internal/resourceMap.js +88 -0
  111. package/dist/cjs/internal/resourceMap.js.map +1 -0
  112. package/dist/cjs/internal/resourceRef.js +92 -0
  113. package/dist/cjs/internal/resourceRef.js.map +1 -0
  114. package/dist/cjs/internal/shardManager.js +219 -235
  115. package/dist/cjs/internal/shardManager.js.map +1 -1
  116. package/dist/dts/ClusterError.d.ts +169 -0
  117. package/dist/dts/ClusterError.d.ts.map +1 -0
  118. package/dist/dts/ClusterMetrics.d.ts +50 -0
  119. package/dist/dts/ClusterMetrics.d.ts.map +1 -0
  120. package/dist/dts/ClusterSchema.d.ts +13 -0
  121. package/dist/dts/ClusterSchema.d.ts.map +1 -0
  122. package/dist/dts/DeliverAt.d.ts +27 -0
  123. package/dist/dts/DeliverAt.d.ts.map +1 -0
  124. package/dist/dts/Entity.d.ts +180 -0
  125. package/dist/dts/Entity.d.ts.map +1 -0
  126. package/dist/dts/EntityAddress.d.ts +55 -0
  127. package/dist/dts/EntityAddress.d.ts.map +1 -0
  128. package/dist/dts/EntityId.d.ts +15 -0
  129. package/dist/dts/EntityId.d.ts.map +1 -0
  130. package/dist/dts/EntityType.d.ts +15 -0
  131. package/dist/dts/EntityType.d.ts.map +1 -0
  132. package/dist/dts/Envelope.d.ts +252 -0
  133. package/dist/dts/Envelope.d.ts.map +1 -0
  134. package/dist/dts/HttpCommon.d.ts +25 -0
  135. package/dist/dts/HttpCommon.d.ts.map +1 -0
  136. package/dist/dts/HttpRunner.d.ts +76 -0
  137. package/dist/dts/HttpRunner.d.ts.map +1 -0
  138. package/dist/dts/HttpShardManager.d.ts +119 -0
  139. package/dist/dts/HttpShardManager.d.ts.map +1 -0
  140. package/dist/dts/MachineId.d.ts +20 -0
  141. package/dist/dts/MachineId.d.ts.map +1 -0
  142. package/dist/dts/Message.d.ts +91 -74
  143. package/dist/dts/Message.d.ts.map +1 -1
  144. package/dist/dts/MessageStorage.d.ts +336 -0
  145. package/dist/dts/MessageStorage.d.ts.map +1 -0
  146. package/dist/dts/Reply.d.ts +171 -0
  147. package/dist/dts/Reply.d.ts.map +1 -0
  148. package/dist/dts/Runner.d.ts +81 -0
  149. package/dist/dts/Runner.d.ts.map +1 -0
  150. package/dist/dts/RunnerAddress.d.ts +56 -0
  151. package/dist/dts/RunnerAddress.d.ts.map +1 -0
  152. package/dist/dts/RunnerHealth.d.ts +54 -0
  153. package/dist/dts/RunnerHealth.d.ts.map +1 -0
  154. package/dist/dts/RunnerServer.d.ts +44 -0
  155. package/dist/dts/RunnerServer.d.ts.map +1 -0
  156. package/dist/dts/Runners.d.ts +161 -0
  157. package/dist/dts/Runners.d.ts.map +1 -0
  158. package/dist/dts/ShardId.d.ts +5 -55
  159. package/dist/dts/ShardId.d.ts.map +1 -1
  160. package/dist/dts/ShardManager.d.ts +435 -23
  161. package/dist/dts/ShardManager.d.ts.map +1 -1
  162. package/dist/dts/ShardStorage.d.ts +200 -0
  163. package/dist/dts/ShardStorage.d.ts.map +1 -0
  164. package/dist/dts/Sharding.d.ts +109 -131
  165. package/dist/dts/Sharding.d.ts.map +1 -1
  166. package/dist/dts/ShardingConfig.d.ts +147 -44
  167. package/dist/dts/ShardingConfig.d.ts.map +1 -1
  168. package/dist/dts/ShardingRegistrationEvent.d.ts +38 -23
  169. package/dist/dts/ShardingRegistrationEvent.d.ts.map +1 -1
  170. package/dist/dts/Singleton.d.ts +13 -0
  171. package/dist/dts/Singleton.d.ts.map +1 -0
  172. package/dist/dts/SingletonAddress.d.ts +49 -0
  173. package/dist/dts/SingletonAddress.d.ts.map +1 -0
  174. package/dist/dts/Snowflake.d.ts +121 -0
  175. package/dist/dts/Snowflake.d.ts.map +1 -0
  176. package/dist/dts/SocketRunner.d.ts +22 -0
  177. package/dist/dts/SocketRunner.d.ts.map +1 -0
  178. package/dist/dts/SocketShardManager.d.ts +17 -0
  179. package/dist/dts/SocketShardManager.d.ts.map +1 -0
  180. package/dist/dts/SqlMessageStorage.d.ts +43 -0
  181. package/dist/dts/SqlMessageStorage.d.ts.map +1 -0
  182. package/dist/dts/SqlShardStorage.d.ts +38 -0
  183. package/dist/dts/SqlShardStorage.d.ts.map +1 -0
  184. package/dist/dts/SynchronizedClock.d.ts +19 -0
  185. package/dist/dts/SynchronizedClock.d.ts.map +1 -0
  186. package/dist/dts/index.d.ts +48 -24
  187. package/dist/dts/index.d.ts.map +1 -1
  188. package/dist/dts/internal/entityReaper.d.ts +2 -0
  189. package/dist/dts/internal/entityReaper.d.ts.map +1 -0
  190. package/dist/dts/internal/hash.d.ts +2 -0
  191. package/dist/dts/internal/hash.d.ts.map +1 -0
  192. package/dist/dts/internal/interruptors.d.ts +2 -0
  193. package/dist/dts/internal/interruptors.d.ts.map +1 -0
  194. package/dist/dts/internal/resourceMap.d.ts +22 -0
  195. package/dist/dts/internal/resourceMap.d.ts.map +1 -0
  196. package/dist/dts/internal/resourceRef.d.ts +25 -0
  197. package/dist/dts/internal/resourceRef.d.ts.map +1 -0
  198. package/dist/dts/internal/shardManager.d.ts +1 -11
  199. package/dist/dts/internal/shardManager.d.ts.map +1 -1
  200. package/dist/esm/ClusterError.js +164 -0
  201. package/dist/esm/ClusterError.js.map +1 -0
  202. package/dist/esm/ClusterMetrics.js +54 -0
  203. package/dist/esm/ClusterMetrics.js.map +1 -0
  204. package/dist/esm/ClusterSchema.js +13 -0
  205. package/dist/esm/ClusterSchema.js.map +1 -0
  206. package/dist/esm/DeliverAt.js +22 -0
  207. package/dist/esm/DeliverAt.js.map +1 -0
  208. package/dist/esm/Entity.js +173 -0
  209. package/dist/esm/Entity.js.map +1 -0
  210. package/dist/esm/EntityAddress.js +44 -0
  211. package/dist/esm/EntityAddress.js.map +1 -0
  212. package/dist/esm/EntityId.js +10 -0
  213. package/dist/esm/EntityId.js.map +1 -0
  214. package/dist/esm/EntityType.js +10 -0
  215. package/dist/esm/EntityType.js.map +1 -0
  216. package/dist/esm/Envelope.js +154 -0
  217. package/dist/esm/Envelope.js.map +1 -0
  218. package/dist/esm/HttpCommon.js +38 -0
  219. package/dist/esm/HttpCommon.js.map +1 -0
  220. package/dist/esm/HttpRunner.js +98 -0
  221. package/dist/esm/HttpRunner.js.map +1 -0
  222. package/dist/esm/HttpShardManager.js +128 -0
  223. package/dist/esm/HttpShardManager.js.map +1 -0
  224. package/dist/esm/MachineId.js +17 -0
  225. package/dist/esm/MachineId.js.map +1 -0
  226. package/dist/esm/Message.js +88 -17
  227. package/dist/esm/Message.js.map +1 -1
  228. package/dist/esm/MessageStorage.js +345 -0
  229. package/dist/esm/MessageStorage.js.map +1 -0
  230. package/dist/esm/Reply.js +184 -0
  231. package/dist/esm/Reply.js.map +1 -0
  232. package/dist/esm/Runner.js +68 -0
  233. package/dist/esm/Runner.js.map +1 -0
  234. package/dist/esm/RunnerAddress.js +52 -0
  235. package/dist/esm/RunnerAddress.js.map +1 -0
  236. package/dist/esm/RunnerHealth.js +58 -0
  237. package/dist/esm/RunnerHealth.js.map +1 -0
  238. package/dist/esm/RunnerServer.js +116 -0
  239. package/dist/esm/RunnerServer.js.map +1 -0
  240. package/dist/esm/Runners.js +332 -0
  241. package/dist/esm/Runners.js.map +1 -0
  242. package/dist/esm/ShardId.js +5 -42
  243. package/dist/esm/ShardId.js.map +1 -1
  244. package/dist/esm/ShardManager.js +486 -7
  245. package/dist/esm/ShardManager.js.map +1 -1
  246. package/dist/esm/ShardStorage.js +129 -0
  247. package/dist/esm/ShardStorage.js.map +1 -0
  248. package/dist/esm/Sharding.js +730 -87
  249. package/dist/esm/Sharding.js.map +1 -1
  250. package/dist/esm/ShardingConfig.js +80 -17
  251. package/dist/esm/ShardingConfig.js.map +1 -1
  252. package/dist/esm/ShardingRegistrationEvent.js +19 -29
  253. package/dist/esm/ShardingRegistrationEvent.js.map +1 -1
  254. package/dist/esm/Singleton.js +15 -0
  255. package/dist/esm/Singleton.js.map +1 -0
  256. package/dist/esm/SingletonAddress.js +40 -0
  257. package/dist/esm/SingletonAddress.js.map +1 -0
  258. package/dist/esm/Snowflake.js +117 -0
  259. package/dist/esm/Snowflake.js.map +1 -0
  260. package/dist/esm/SocketRunner.js +31 -0
  261. package/dist/esm/SocketRunner.js.map +1 -0
  262. package/dist/esm/SocketShardManager.js +24 -0
  263. package/dist/esm/SocketShardManager.js.map +1 -0
  264. package/dist/esm/SqlMessageStorage.js +658 -0
  265. package/dist/esm/SqlMessageStorage.js.map +1 -0
  266. package/dist/esm/SqlShardStorage.js +218 -0
  267. package/dist/esm/SqlShardStorage.js.map +1 -0
  268. package/dist/esm/SynchronizedClock.js +57 -0
  269. package/dist/esm/SynchronizedClock.js.map +1 -0
  270. package/dist/esm/index.js +48 -24
  271. package/dist/esm/index.js.map +1 -1
  272. package/dist/esm/internal/entityManager.js +311 -142
  273. package/dist/esm/internal/entityManager.js.map +1 -1
  274. package/dist/esm/internal/entityReaper.js +38 -0
  275. package/dist/esm/internal/entityReaper.js.map +1 -0
  276. package/dist/esm/internal/hash.js +12 -0
  277. package/dist/esm/internal/hash.js.map +1 -0
  278. package/dist/esm/internal/interruptors.js +3 -0
  279. package/dist/esm/internal/interruptors.js.map +1 -0
  280. package/dist/esm/internal/resourceMap.js +79 -0
  281. package/dist/esm/internal/resourceMap.js.map +1 -0
  282. package/dist/esm/internal/resourceRef.js +83 -0
  283. package/dist/esm/internal/resourceRef.js.map +1 -0
  284. package/dist/esm/internal/shardManager.js +217 -233
  285. package/dist/esm/internal/shardManager.js.map +1 -1
  286. package/package.json +212 -154
  287. package/src/ClusterError.ts +193 -0
  288. package/src/ClusterMetrics.ts +62 -0
  289. package/src/ClusterSchema.ts +13 -0
  290. package/src/DeliverAt.ts +36 -0
  291. package/src/Entity.ts +438 -0
  292. package/src/EntityAddress.ts +55 -0
  293. package/src/EntityId.ts +16 -0
  294. package/src/EntityType.ts +16 -0
  295. package/src/Envelope.ts +352 -0
  296. package/src/HttpCommon.ts +73 -0
  297. package/src/HttpRunner.ts +196 -0
  298. package/src/HttpShardManager.ts +273 -0
  299. package/src/MachineId.ts +27 -0
  300. package/src/Message.ts +143 -92
  301. package/src/MessageStorage.ts +697 -0
  302. package/src/Reply.ts +295 -0
  303. package/src/Runner.ts +84 -0
  304. package/src/RunnerAddress.ts +61 -0
  305. package/src/RunnerHealth.ts +87 -0
  306. package/src/RunnerServer.ts +156 -0
  307. package/src/Runners.ts +533 -0
  308. package/src/ShardId.ts +10 -62
  309. package/src/ShardManager.ts +780 -29
  310. package/src/ShardStorage.ts +289 -0
  311. package/src/Sharding.ts +1060 -183
  312. package/src/ShardingConfig.ts +186 -45
  313. package/src/ShardingRegistrationEvent.ts +38 -39
  314. package/src/Singleton.ts +20 -0
  315. package/src/SingletonAddress.ts +47 -0
  316. package/src/Snowflake.ts +194 -0
  317. package/src/SocketRunner.ts +59 -0
  318. package/src/SocketShardManager.ts +48 -0
  319. package/src/SqlMessageStorage.ts +833 -0
  320. package/src/SqlShardStorage.ts +292 -0
  321. package/src/SynchronizedClock.ts +82 -0
  322. package/src/index.ts +54 -24
  323. package/src/internal/entityManager.ts +464 -361
  324. package/src/internal/entityReaper.ts +53 -0
  325. package/src/internal/hash.ts +11 -0
  326. package/src/internal/interruptors.ts +4 -0
  327. package/src/internal/resourceMap.ts +89 -0
  328. package/src/internal/resourceRef.ts +88 -0
  329. package/src/internal/shardManager.ts +273 -546
  330. package/AtLeastOnce/package.json +0 -6
  331. package/AtLeastOnceStorage/package.json +0 -6
  332. package/Broadcaster/package.json +0 -6
  333. package/ManagerConfig/package.json +0 -6
  334. package/MessageState/package.json +0 -6
  335. package/Messenger/package.json +0 -6
  336. package/Pod/package.json +0 -6
  337. package/PodAddress/package.json +0 -6
  338. package/Pods/package.json +0 -6
  339. package/PodsHealth/package.json +0 -6
  340. package/PoisonPill/package.json +0 -6
  341. package/RecipientAddress/package.json +0 -6
  342. package/RecipientBehaviour/package.json +0 -6
  343. package/RecipientBehaviourContext/package.json +0 -6
  344. package/RecipientType/package.json +0 -6
  345. package/Serialization/package.json +0 -6
  346. package/SerializedEnvelope/package.json +0 -6
  347. package/SerializedMessage/package.json +0 -6
  348. package/ShardManagerClient/package.json +0 -6
  349. package/ShardingEvent/package.json +0 -6
  350. package/ShardingException/package.json +0 -6
  351. package/Storage/package.json +0 -6
  352. package/dist/cjs/AtLeastOnce.js.map +0 -1
  353. package/dist/cjs/AtLeastOnceStorage.js.map +0 -1
  354. package/dist/cjs/Broadcaster.js +0 -6
  355. package/dist/cjs/Broadcaster.js.map +0 -1
  356. package/dist/cjs/ManagerConfig.js.map +0 -1
  357. package/dist/cjs/MessageState.js +0 -55
  358. package/dist/cjs/MessageState.js.map +0 -1
  359. package/dist/cjs/Messenger.js +0 -6
  360. package/dist/cjs/Messenger.js.map +0 -1
  361. package/dist/cjs/Pod.js +0 -78
  362. package/dist/cjs/Pod.js.map +0 -1
  363. package/dist/cjs/PodAddress.js +0 -77
  364. package/dist/cjs/PodAddress.js.map +0 -1
  365. package/dist/cjs/Pods.js.map +0 -1
  366. package/dist/cjs/PodsHealth.js +0 -41
  367. package/dist/cjs/PodsHealth.js.map +0 -1
  368. package/dist/cjs/PoisonPill.js +0 -78
  369. package/dist/cjs/PoisonPill.js.map +0 -1
  370. package/dist/cjs/RecipientAddress.js +0 -79
  371. package/dist/cjs/RecipientAddress.js.map +0 -1
  372. package/dist/cjs/RecipientBehaviour.js +0 -38
  373. package/dist/cjs/RecipientBehaviour.js.map +0 -1
  374. package/dist/cjs/RecipientBehaviourContext.js +0 -64
  375. package/dist/cjs/RecipientBehaviourContext.js.map +0 -1
  376. package/dist/cjs/RecipientType.js +0 -123
  377. package/dist/cjs/RecipientType.js.map +0 -1
  378. package/dist/cjs/Serialization.js +0 -32
  379. package/dist/cjs/Serialization.js.map +0 -1
  380. package/dist/cjs/SerializedEnvelope.js +0 -87
  381. package/dist/cjs/SerializedEnvelope.js.map +0 -1
  382. package/dist/cjs/SerializedMessage.js +0 -64
  383. package/dist/cjs/SerializedMessage.js.map +0 -1
  384. package/dist/cjs/ShardManagerClient.js.map +0 -1
  385. package/dist/cjs/ShardingEvent.js +0 -72
  386. package/dist/cjs/ShardingEvent.js.map +0 -1
  387. package/dist/cjs/ShardingException.js +0 -107
  388. package/dist/cjs/ShardingException.js.map +0 -1
  389. package/dist/cjs/Storage.js +0 -40
  390. package/dist/cjs/Storage.js.map +0 -1
  391. package/dist/cjs/internal/atLeastOnce.js +0 -35
  392. package/dist/cjs/internal/atLeastOnce.js.map +0 -1
  393. package/dist/cjs/internal/atLeastOnceStorage.js +0 -163
  394. package/dist/cjs/internal/atLeastOnceStorage.js.map +0 -1
  395. package/dist/cjs/internal/entityState.js +0 -47
  396. package/dist/cjs/internal/entityState.js.map +0 -1
  397. package/dist/cjs/internal/managerConfig.js +0 -46
  398. package/dist/cjs/internal/managerConfig.js.map +0 -1
  399. package/dist/cjs/internal/message.js +0 -48
  400. package/dist/cjs/internal/message.js.map +0 -1
  401. package/dist/cjs/internal/messageState.js +0 -79
  402. package/dist/cjs/internal/messageState.js.map +0 -1
  403. package/dist/cjs/internal/podWithMetadata.js +0 -54
  404. package/dist/cjs/internal/podWithMetadata.js.map +0 -1
  405. package/dist/cjs/internal/pods.js +0 -35
  406. package/dist/cjs/internal/pods.js.map +0 -1
  407. package/dist/cjs/internal/podsHealth.js +0 -40
  408. package/dist/cjs/internal/podsHealth.js.map +0 -1
  409. package/dist/cjs/internal/recipientBehaviour.js +0 -52
  410. package/dist/cjs/internal/recipientBehaviour.js.map +0 -1
  411. package/dist/cjs/internal/recipientBehaviourContext.js +0 -36
  412. package/dist/cjs/internal/recipientBehaviourContext.js.map +0 -1
  413. package/dist/cjs/internal/serialization.js +0 -48
  414. package/dist/cjs/internal/serialization.js.map +0 -1
  415. package/dist/cjs/internal/shardManagerClient.js +0 -48
  416. package/dist/cjs/internal/shardManagerClient.js.map +0 -1
  417. package/dist/cjs/internal/shardManagerState.js +0 -44
  418. package/dist/cjs/internal/shardManagerState.js.map +0 -1
  419. package/dist/cjs/internal/sharding.js +0 -306
  420. package/dist/cjs/internal/sharding.js.map +0 -1
  421. package/dist/cjs/internal/shardingConfig.js +0 -56
  422. package/dist/cjs/internal/shardingConfig.js.map +0 -1
  423. package/dist/cjs/internal/storage.js +0 -52
  424. package/dist/cjs/internal/storage.js.map +0 -1
  425. package/dist/cjs/internal/utils.js +0 -69
  426. package/dist/cjs/internal/utils.js.map +0 -1
  427. package/dist/dts/AtLeastOnce.d.ts +0 -20
  428. package/dist/dts/AtLeastOnce.d.ts.map +0 -1
  429. package/dist/dts/AtLeastOnceStorage.d.ts +0 -75
  430. package/dist/dts/AtLeastOnceStorage.d.ts.map +0 -1
  431. package/dist/dts/Broadcaster.d.ts +0 -32
  432. package/dist/dts/Broadcaster.d.ts.map +0 -1
  433. package/dist/dts/ManagerConfig.d.ts +0 -61
  434. package/dist/dts/ManagerConfig.d.ts.map +0 -1
  435. package/dist/dts/MessageState.d.ts +0 -107
  436. package/dist/dts/MessageState.d.ts.map +0 -1
  437. package/dist/dts/Messenger.d.ts +0 -32
  438. package/dist/dts/Messenger.d.ts.map +0 -1
  439. package/dist/dts/Pod.d.ts +0 -81
  440. package/dist/dts/Pod.d.ts.map +0 -1
  441. package/dist/dts/PodAddress.d.ts +0 -80
  442. package/dist/dts/PodAddress.d.ts.map +0 -1
  443. package/dist/dts/Pods.d.ts +0 -78
  444. package/dist/dts/Pods.d.ts.map +0 -1
  445. package/dist/dts/PodsHealth.d.ts +0 -66
  446. package/dist/dts/PodsHealth.d.ts.map +0 -1
  447. package/dist/dts/PoisonPill.d.ts +0 -78
  448. package/dist/dts/PoisonPill.d.ts.map +0 -1
  449. package/dist/dts/RecipientAddress.d.ts +0 -57
  450. package/dist/dts/RecipientAddress.d.ts.map +0 -1
  451. package/dist/dts/RecipientBehaviour.d.ts +0 -72
  452. package/dist/dts/RecipientBehaviour.d.ts.map +0 -1
  453. package/dist/dts/RecipientBehaviourContext.d.ts +0 -83
  454. package/dist/dts/RecipientBehaviourContext.d.ts.map +0 -1
  455. package/dist/dts/RecipientType.d.ts +0 -93
  456. package/dist/dts/RecipientType.d.ts.map +0 -1
  457. package/dist/dts/Serialization.d.ts +0 -58
  458. package/dist/dts/Serialization.d.ts.map +0 -1
  459. package/dist/dts/SerializedEnvelope.d.ts +0 -86
  460. package/dist/dts/SerializedEnvelope.d.ts.map +0 -1
  461. package/dist/dts/SerializedMessage.d.ts +0 -66
  462. package/dist/dts/SerializedMessage.d.ts.map +0 -1
  463. package/dist/dts/ShardManagerClient.d.ts +0 -50
  464. package/dist/dts/ShardManagerClient.d.ts.map +0 -1
  465. package/dist/dts/ShardingEvent.d.ts +0 -90
  466. package/dist/dts/ShardingEvent.d.ts.map +0 -1
  467. package/dist/dts/ShardingException.d.ts +0 -125
  468. package/dist/dts/ShardingException.d.ts.map +0 -1
  469. package/dist/dts/Storage.d.ts +0 -78
  470. package/dist/dts/Storage.d.ts.map +0 -1
  471. package/dist/dts/internal/atLeastOnce.d.ts +0 -2
  472. package/dist/dts/internal/atLeastOnce.d.ts.map +0 -1
  473. package/dist/dts/internal/atLeastOnceStorage.d.ts +0 -2
  474. package/dist/dts/internal/atLeastOnceStorage.d.ts.map +0 -1
  475. package/dist/dts/internal/entityState.d.ts +0 -21
  476. package/dist/dts/internal/entityState.d.ts.map +0 -1
  477. package/dist/dts/internal/managerConfig.d.ts +0 -2
  478. package/dist/dts/internal/managerConfig.d.ts.map +0 -1
  479. package/dist/dts/internal/message.d.ts +0 -9
  480. package/dist/dts/internal/message.d.ts.map +0 -1
  481. package/dist/dts/internal/messageState.d.ts +0 -2
  482. package/dist/dts/internal/messageState.d.ts.map +0 -1
  483. package/dist/dts/internal/podWithMetadata.d.ts +0 -2
  484. package/dist/dts/internal/podWithMetadata.d.ts.map +0 -1
  485. package/dist/dts/internal/pods.d.ts +0 -2
  486. package/dist/dts/internal/pods.d.ts.map +0 -1
  487. package/dist/dts/internal/podsHealth.d.ts +0 -2
  488. package/dist/dts/internal/podsHealth.d.ts.map +0 -1
  489. package/dist/dts/internal/recipientBehaviour.d.ts +0 -2
  490. package/dist/dts/internal/recipientBehaviour.d.ts.map +0 -1
  491. package/dist/dts/internal/recipientBehaviourContext.d.ts +0 -2
  492. package/dist/dts/internal/recipientBehaviourContext.d.ts.map +0 -1
  493. package/dist/dts/internal/serialization.d.ts +0 -2
  494. package/dist/dts/internal/serialization.d.ts.map +0 -1
  495. package/dist/dts/internal/shardManagerClient.d.ts +0 -2
  496. package/dist/dts/internal/shardManagerClient.d.ts.map +0 -1
  497. package/dist/dts/internal/shardManagerState.d.ts +0 -26
  498. package/dist/dts/internal/shardManagerState.d.ts.map +0 -1
  499. package/dist/dts/internal/sharding.d.ts +0 -2
  500. package/dist/dts/internal/sharding.d.ts.map +0 -1
  501. package/dist/dts/internal/shardingConfig.d.ts +0 -2
  502. package/dist/dts/internal/shardingConfig.d.ts.map +0 -1
  503. package/dist/dts/internal/storage.d.ts +0 -2
  504. package/dist/dts/internal/storage.d.ts.map +0 -1
  505. package/dist/dts/internal/utils.d.ts +0 -2
  506. package/dist/dts/internal/utils.d.ts.map +0 -1
  507. package/dist/esm/AtLeastOnce.js +0 -12
  508. package/dist/esm/AtLeastOnce.js.map +0 -1
  509. package/dist/esm/AtLeastOnceStorage.js +0 -17
  510. package/dist/esm/AtLeastOnceStorage.js.map +0 -1
  511. package/dist/esm/Broadcaster.js +0 -2
  512. package/dist/esm/Broadcaster.js.map +0 -1
  513. package/dist/esm/ManagerConfig.js +0 -26
  514. package/dist/esm/ManagerConfig.js.map +0 -1
  515. package/dist/esm/MessageState.js +0 -47
  516. package/dist/esm/MessageState.js.map +0 -1
  517. package/dist/esm/Messenger.js +0 -2
  518. package/dist/esm/Messenger.js.map +0 -1
  519. package/dist/esm/Pod.js +0 -65
  520. package/dist/esm/Pod.js.map +0 -1
  521. package/dist/esm/PodAddress.js +0 -64
  522. package/dist/esm/PodAddress.js.map +0 -1
  523. package/dist/esm/Pods.js +0 -27
  524. package/dist/esm/Pods.js.map +0 -1
  525. package/dist/esm/PodsHealth.js +0 -33
  526. package/dist/esm/PodsHealth.js.map +0 -1
  527. package/dist/esm/PoisonPill.js +0 -65
  528. package/dist/esm/PoisonPill.js.map +0 -1
  529. package/dist/esm/RecipientAddress.js +0 -67
  530. package/dist/esm/RecipientAddress.js.map +0 -1
  531. package/dist/esm/RecipientBehaviour.js +0 -30
  532. package/dist/esm/RecipientBehaviour.js.map +0 -1
  533. package/dist/esm/RecipientBehaviourContext.js +0 -56
  534. package/dist/esm/RecipientBehaviourContext.js.map +0 -1
  535. package/dist/esm/RecipientType.js +0 -108
  536. package/dist/esm/RecipientType.js.map +0 -1
  537. package/dist/esm/Serialization.js +0 -24
  538. package/dist/esm/Serialization.js.map +0 -1
  539. package/dist/esm/SerializedEnvelope.js +0 -74
  540. package/dist/esm/SerializedEnvelope.js.map +0 -1
  541. package/dist/esm/SerializedMessage.js +0 -51
  542. package/dist/esm/SerializedMessage.js.map +0 -1
  543. package/dist/esm/ShardManagerClient.js +0 -22
  544. package/dist/esm/ShardManagerClient.js.map +0 -1
  545. package/dist/esm/ShardingEvent.js +0 -62
  546. package/dist/esm/ShardingEvent.js.map +0 -1
  547. package/dist/esm/ShardingException.js +0 -91
  548. package/dist/esm/ShardingException.js.map +0 -1
  549. package/dist/esm/Storage.js +0 -32
  550. package/dist/esm/Storage.js.map +0 -1
  551. package/dist/esm/internal/atLeastOnce.js +0 -26
  552. package/dist/esm/internal/atLeastOnce.js.map +0 -1
  553. package/dist/esm/internal/atLeastOnceStorage.js +0 -154
  554. package/dist/esm/internal/atLeastOnceStorage.js.map +0 -1
  555. package/dist/esm/internal/entityState.js +0 -35
  556. package/dist/esm/internal/entityState.js.map +0 -1
  557. package/dist/esm/internal/managerConfig.js +0 -38
  558. package/dist/esm/internal/managerConfig.js.map +0 -1
  559. package/dist/esm/internal/message.js +0 -35
  560. package/dist/esm/internal/message.js.map +0 -1
  561. package/dist/esm/internal/messageState.js +0 -66
  562. package/dist/esm/internal/messageState.js.map +0 -1
  563. package/dist/esm/internal/podWithMetadata.js +0 -41
  564. package/dist/esm/internal/podWithMetadata.js.map +0 -1
  565. package/dist/esm/internal/pods.js +0 -25
  566. package/dist/esm/internal/pods.js.map +0 -1
  567. package/dist/esm/internal/podsHealth.js +0 -30
  568. package/dist/esm/internal/podsHealth.js.map +0 -1
  569. package/dist/esm/internal/recipientBehaviour.js +0 -42
  570. package/dist/esm/internal/recipientBehaviour.js.map +0 -1
  571. package/dist/esm/internal/recipientBehaviourContext.js +0 -26
  572. package/dist/esm/internal/recipientBehaviourContext.js.map +0 -1
  573. package/dist/esm/internal/serialization.js +0 -38
  574. package/dist/esm/internal/serialization.js.map +0 -1
  575. package/dist/esm/internal/shardManagerClient.js +0 -38
  576. package/dist/esm/internal/shardManagerClient.js.map +0 -1
  577. package/dist/esm/internal/shardManagerState.js +0 -36
  578. package/dist/esm/internal/shardManagerState.js.map +0 -1
  579. package/dist/esm/internal/sharding.js +0 -288
  580. package/dist/esm/internal/sharding.js.map +0 -1
  581. package/dist/esm/internal/shardingConfig.js +0 -47
  582. package/dist/esm/internal/shardingConfig.js.map +0 -1
  583. package/dist/esm/internal/storage.js +0 -42
  584. package/dist/esm/internal/storage.js.map +0 -1
  585. package/dist/esm/internal/utils.js +0 -56
  586. package/dist/esm/internal/utils.js.map +0 -1
  587. package/src/AtLeastOnce.ts +0 -28
  588. package/src/AtLeastOnceStorage.ts +0 -96
  589. package/src/Broadcaster.ts +0 -48
  590. package/src/ManagerConfig.ts +0 -67
  591. package/src/MessageState.ts +0 -126
  592. package/src/Messenger.ts +0 -40
  593. package/src/Pod.ts +0 -95
  594. package/src/PodAddress.ts +0 -94
  595. package/src/Pods.ts +0 -100
  596. package/src/PodsHealth.ts +0 -74
  597. package/src/PoisonPill.ts +0 -105
  598. package/src/RecipientAddress.ts +0 -72
  599. package/src/RecipientBehaviour.ts +0 -108
  600. package/src/RecipientBehaviourContext.ts +0 -101
  601. package/src/RecipientType.ts +0 -134
  602. package/src/Serialization.ts +0 -72
  603. package/src/SerializedEnvelope.ts +0 -108
  604. package/src/SerializedMessage.ts +0 -82
  605. package/src/ShardManagerClient.ts +0 -57
  606. package/src/ShardingEvent.ts +0 -121
  607. package/src/ShardingException.ts +0 -151
  608. package/src/Storage.ts +0 -92
  609. package/src/internal/atLeastOnce.ts +0 -59
  610. package/src/internal/atLeastOnceStorage.ts +0 -218
  611. package/src/internal/entityState.ts +0 -64
  612. package/src/internal/managerConfig.ts +0 -84
  613. package/src/internal/message.ts +0 -63
  614. package/src/internal/messageState.ts +0 -98
  615. package/src/internal/podWithMetadata.ts +0 -72
  616. package/src/internal/pods.ts +0 -29
  617. package/src/internal/podsHealth.ts +0 -39
  618. package/src/internal/recipientBehaviour.ts +0 -133
  619. package/src/internal/recipientBehaviourContext.ts +0 -70
  620. package/src/internal/serialization.ts +0 -63
  621. package/src/internal/shardManagerClient.ts +0 -49
  622. package/src/internal/shardManagerState.ts +0 -80
  623. package/src/internal/sharding.ts +0 -789
  624. package/src/internal/shardingConfig.ts +0 -97
  625. package/src/internal/storage.ts +0 -60
  626. package/src/internal/utils.ts +0 -54
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Metric from "effect/Metric"
5
+
6
+ /**
7
+ * @since 1.0.0
8
+ * @category metrics
9
+ */
10
+ export const shards = Metric.gauge("effect_cluster_shards")
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category metrics
15
+ */
16
+ export const entities = Metric.gauge("effect_cluster_entities", {
17
+ bigint: true
18
+ })
19
+
20
+ /**
21
+ * @since 1.0.0
22
+ * @category metrics
23
+ */
24
+ export const mailboxSize = Metric.gauge("effect_cluster_mailbox_size", {
25
+ bigint: true
26
+ })
27
+
28
+ /**
29
+ * @since 1.0.0
30
+ * @category metrics
31
+ */
32
+ export const singletons = Metric.gauge("effect_cluster_singletons")
33
+
34
+ /**
35
+ * @since 1.0.0
36
+ * @category metrics
37
+ */
38
+ export const runners = Metric.gauge("effect_cluster_runners")
39
+
40
+ /**
41
+ * @since 1.0.0
42
+ * @category metrics
43
+ */
44
+ export const assignedShards = Metric.gauge("effect_cluster_shards_assigned")
45
+
46
+ /**
47
+ * @since 1.0.0
48
+ * @category metrics
49
+ */
50
+ export const unassignedShards = Metric.gauge("effect_cluster_shards_unassigned")
51
+
52
+ /**
53
+ * @since 1.0.0
54
+ * @category metrics
55
+ */
56
+ export const rebalances = Metric.counter("effect_cluster_rebalances")
57
+
58
+ /**
59
+ * @since 1.0.0
60
+ * @category metrics
61
+ */
62
+ export const runnerHealthChecked = Metric.counter("effect_cluster_runner_health_checked")
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Context from "effect/Context"
5
+ import { constFalse } from "effect/Function"
6
+
7
+ /**
8
+ * @since 1.0.0
9
+ * @category Annotations
10
+ */
11
+ export class Persisted extends Context.Reference<Persisted>()("@effect/cluster/ClusterSchema/Persisted", {
12
+ defaultValue: constFalse
13
+ }) {}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type { DateTime } from "effect/DateTime"
5
+ import { hasProperty } from "effect/Predicate"
6
+
7
+ /**
8
+ * @since 1.0.0
9
+ * @category symbols
10
+ */
11
+ export const symbol: unique symbol = Symbol.for("@effect/cluster/DeliverAt")
12
+
13
+ /**
14
+ * @since 1.0.0
15
+ * @category models
16
+ */
17
+ export interface DeliverAt {
18
+ [symbol](): DateTime
19
+ }
20
+
21
+ /**
22
+ * @since 1.0.0
23
+ * @category guards
24
+ */
25
+ export const isDeliverAt = (self: unknown): self is DeliverAt => hasProperty(self, symbol)
26
+
27
+ /**
28
+ * @since 1.0.0
29
+ * @category accessors
30
+ */
31
+ export const toMillis = (self: unknown): number | null => {
32
+ if (isDeliverAt(self)) {
33
+ return self[symbol]().epochMillis
34
+ }
35
+ return null
36
+ }
package/src/Entity.ts ADDED
@@ -0,0 +1,438 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import type * as Rpc from "@effect/rpc/Rpc"
5
+ import type * as RpcClient from "@effect/rpc/RpcClient"
6
+ import * as RpcGroup from "@effect/rpc/RpcGroup"
7
+ import * as Arr from "effect/Array"
8
+ import type * as Cause from "effect/Cause"
9
+ import * as Context from "effect/Context"
10
+ import * as Data from "effect/Data"
11
+ import type { DurationInput } from "effect/Duration"
12
+ import * as Effect from "effect/Effect"
13
+ import * as Equal from "effect/Equal"
14
+ import * as Exit from "effect/Exit"
15
+ import * as Hash from "effect/Hash"
16
+ import * as Layer from "effect/Layer"
17
+ import * as Mailbox from "effect/Mailbox"
18
+ import * as Option from "effect/Option"
19
+ import * as Predicate from "effect/Predicate"
20
+ import type { Scope } from "effect/Scope"
21
+ import type * as Stream from "effect/Stream"
22
+ import type { AlreadyProcessingMessage, MailboxFull, PersistenceError } from "./ClusterError.js"
23
+ import type { EntityAddress } from "./EntityAddress.js"
24
+ import { EntityType } from "./EntityType.js"
25
+ import type * as Envelope from "./Envelope.js"
26
+ import type * as Reply from "./Reply.js"
27
+ import type { RunnerAddress } from "./RunnerAddress.js"
28
+ import type { Sharding } from "./Sharding.js"
29
+
30
+ /**
31
+ * @since 1.0.0
32
+ * @category type ids
33
+ */
34
+ export const TypeId: unique symbol = Symbol.for("@effect/cluster/Entity")
35
+
36
+ /**
37
+ * @since 1.0.0
38
+ * @category type ids
39
+ */
40
+ export type TypeId = typeof TypeId
41
+
42
+ /**
43
+ * @since 1.0.0
44
+ * @category models
45
+ */
46
+ export interface Entity<in out Rpcs extends Rpc.Any> extends Equal.Equal {
47
+ readonly [TypeId]: TypeId
48
+ /**
49
+ * The name of the entity type.
50
+ */
51
+ readonly type: EntityType
52
+
53
+ /**
54
+ * A RpcGroup definition for messages which represents the messaging protocol
55
+ * that the entity is capable of processing.
56
+ */
57
+ readonly protocol: RpcGroup.RpcGroup<Rpcs>
58
+
59
+ /**
60
+ * Annotate the entity with a value.
61
+ */
62
+ annotate<I, S>(tag: Context.Tag<I, S>, value: S): Entity<Rpcs>
63
+
64
+ /**
65
+ * Annotate the Rpc's above this point with a value.
66
+ */
67
+ annotateRpcs<I, S>(tag: Context.Tag<I, S>, value: S): Entity<Rpcs>
68
+
69
+ /**
70
+ * Annotate the entity with a context object.
71
+ */
72
+ annotateContext<S>(context: Context.Context<S>): Entity<Rpcs>
73
+
74
+ /**
75
+ * Annotate the Rpc's above this point with a context object.
76
+ */
77
+ annotateRpcsContext<S>(context: Context.Context<S>): Entity<Rpcs>
78
+
79
+ /**
80
+ * Create a client for this entity.
81
+ */
82
+ readonly client: Effect.Effect<
83
+ (entityId: string) => RpcClient.RpcClient<Rpcs, MailboxFull | AlreadyProcessingMessage | PersistenceError>,
84
+ never,
85
+ Sharding
86
+ >
87
+
88
+ /**
89
+ * Create a Layer from an Entity.
90
+ *
91
+ * It will register the entity with the Sharding service.
92
+ */
93
+ toLayer<
94
+ Handlers extends HandlersFrom<Rpcs>,
95
+ RX = never
96
+ >(
97
+ build: Handlers | Effect.Effect<Handlers, never, RX>,
98
+ options?: {
99
+ readonly maxIdleTime?: DurationInput | undefined
100
+ readonly concurrency?: number | "unbounded" | undefined
101
+ readonly mailboxCapacity?: number | "unbounded" | undefined
102
+ }
103
+ ): Layer.Layer<
104
+ never,
105
+ never,
106
+ | Exclude<RX, Scope | CurrentAddress | CurrentRunnerAddress>
107
+ | RpcGroup.HandlersContext<Rpcs, Handlers>
108
+ | Rpc.Context<Rpcs>
109
+ | Rpc.Middleware<Rpcs>
110
+ | Sharding
111
+ >
112
+
113
+ /**
114
+ * Create a Layer from an Entity.
115
+ *
116
+ * It will register the entity with the Sharding service.
117
+ */
118
+ toLayerMailbox<
119
+ R,
120
+ RX = never
121
+ >(
122
+ build:
123
+ | ((
124
+ mailbox: Mailbox.ReadonlyMailbox<Envelope.Request<Rpcs>>,
125
+ replier: Replier<Rpcs>
126
+ ) => Effect.Effect<never, never, R>)
127
+ | Effect.Effect<
128
+ (
129
+ mailbox: Mailbox.ReadonlyMailbox<Envelope.Request<Rpcs>>,
130
+ replier: Replier<Rpcs>
131
+ ) => Effect.Effect<never, never, R>,
132
+ never,
133
+ RX
134
+ >,
135
+ options?: {
136
+ readonly maxIdleTime?: DurationInput | undefined
137
+ readonly mailboxCapacity?: number | "unbounded" | undefined
138
+ }
139
+ ): Layer.Layer<
140
+ never,
141
+ never,
142
+ | Exclude<RX, Scope | CurrentAddress>
143
+ | R
144
+ | Rpc.Context<Rpcs>
145
+ | Rpc.Middleware<Rpcs>
146
+ | Sharding
147
+ >
148
+ }
149
+ /**
150
+ * @since 1.0.0
151
+ * @category models
152
+ */
153
+ export type Any = Entity<Rpc.Any>
154
+
155
+ /**
156
+ * @since 1.0.0
157
+ * @category models
158
+ */
159
+ export type HandlersFrom<Rpc extends Rpc.Any> = {
160
+ readonly [Current in Rpc as Current["_tag"]]: (
161
+ envelope: Request<Current>
162
+ ) => RpcGroup.ResultFrom<Current> | Rpc.Fork<RpcGroup.ResultFrom<Current>>
163
+ }
164
+
165
+ /**
166
+ * @since 1.0.0
167
+ * @category refinements
168
+ */
169
+ export const isEntity = (u: unknown): u is Any => Predicate.hasProperty(u, TypeId)
170
+
171
+ const Proto = {
172
+ [TypeId]: TypeId,
173
+ [Hash.symbol](this: Entity<any>): number {
174
+ return Hash.structure({ type: this.type })
175
+ },
176
+ [Equal.symbol](this: Entity<any>, that: Equal.Equal): boolean {
177
+ return isEntity(that) && this.type === that.type
178
+ },
179
+ annotate<I, S>(this: Entity<any>, tag: Context.Tag<I, S>, value: S) {
180
+ return fromRpcGroup(this.type, this.protocol.annotate(tag, value))
181
+ },
182
+ annotateRpcs<I, S>(this: Entity<any>, tag: Context.Tag<I, S>, value: S) {
183
+ return fromRpcGroup(this.type, this.protocol.annotateRpcs(tag, value))
184
+ },
185
+ annotateContext<S>(this: Entity<any>, context: Context.Context<S>) {
186
+ return fromRpcGroup(this.type, this.protocol.annotateContext(context))
187
+ },
188
+ annotateRpcsContext<S>(this: Entity<any>, context: Context.Context<S>) {
189
+ return fromRpcGroup(this.type, this.protocol.annotateRpcsContext(context))
190
+ },
191
+ get client() {
192
+ return shardingTag.pipe(
193
+ Effect.flatMap((sharding) => sharding.makeClient(this as any))
194
+ )
195
+ },
196
+ toLayer<
197
+ Rpcs extends Rpc.Any,
198
+ Handlers extends HandlersFrom<Rpcs>,
199
+ RX = never
200
+ >(
201
+ this: Entity<Rpcs>,
202
+ build: Handlers | Effect.Effect<Handlers, never, RX>,
203
+ options?: {
204
+ readonly maxIdleTime?: DurationInput | undefined
205
+ readonly concurrency?: number | "unbounded" | undefined
206
+ }
207
+ ): Layer.Layer<
208
+ never,
209
+ never,
210
+ | Exclude<RX, Scope | CurrentAddress>
211
+ | RpcGroup.HandlersContext<Rpcs, Handlers>
212
+ | Rpc.Context<Rpcs>
213
+ | Rpc.Middleware<Rpcs>
214
+ | Sharding
215
+ > {
216
+ return shardingTag.pipe(
217
+ Effect.flatMap((sharding) =>
218
+ sharding.registerEntity(
219
+ this,
220
+ Effect.isEffect(build) ? build : Effect.succeed(build),
221
+ options
222
+ )
223
+ ),
224
+ Layer.effectDiscard
225
+ )
226
+ },
227
+ toLayerMailbox<
228
+ Rpcs extends Rpc.Any,
229
+ R,
230
+ RX = never
231
+ >(
232
+ this: Entity<Rpcs>,
233
+ build:
234
+ | ((
235
+ mailbox: Mailbox.ReadonlyMailbox<Envelope.Request<Rpcs>>,
236
+ replier: Replier<Rpcs>
237
+ ) => Effect.Effect<never, never, R>)
238
+ | Effect.Effect<
239
+ (
240
+ mailbox: Mailbox.ReadonlyMailbox<Envelope.Request<Rpcs>>,
241
+ replier: Replier<Rpcs>
242
+ ) => Effect.Effect<never, never, R>,
243
+ never,
244
+ RX
245
+ >,
246
+ options?: {
247
+ readonly maxIdleTime?: DurationInput | undefined
248
+ }
249
+ ) {
250
+ const buildHandlers = Effect.gen(this, function*() {
251
+ const behaviour = Effect.isEffect(build) ? yield* build : build
252
+ const mailbox = yield* Mailbox.make<Envelope.Request<Rpcs>>()
253
+
254
+ // create the rpc handlers for the entity
255
+ const handler = (envelope: any) => {
256
+ return Effect.async<any, any>((resume) => {
257
+ mailbox.unsafeOffer(envelope)
258
+ resumes.set(envelope, resume)
259
+ })
260
+ }
261
+ const handlers: Record<string, any> = {}
262
+ for (const rpc of this.protocol.requests.keys()) {
263
+ handlers[rpc] = handler
264
+ }
265
+
266
+ // make the Replier for the behaviour
267
+ const resumes = new Map<Envelope.Request<any>, (exit: Exit.Exit<any, any>) => void>()
268
+ const complete = (request: Envelope.Request<any>, exit: Exit.Exit<any, any>) =>
269
+ Effect.sync(() => {
270
+ const resume = resumes.get(request)
271
+ if (resume) {
272
+ resumes.delete(request)
273
+ resume(exit)
274
+ }
275
+ })
276
+ const replier: Replier<Rpcs> = {
277
+ succeed: (request, value) => complete(request, Exit.succeed(value)),
278
+ fail: (request, error) => complete(request, Exit.fail(error)),
279
+ failCause: (request, cause) => complete(request, Exit.failCause(cause)),
280
+ complete
281
+ }
282
+
283
+ // fork the behaviour into the layer scope
284
+ yield* behaviour(mailbox, replier).pipe(
285
+ Effect.catchAllCause((cause) => {
286
+ const exit = Exit.failCause(cause)
287
+ for (const resume of resumes.values()) {
288
+ resume(exit)
289
+ }
290
+ return Effect.void
291
+ }),
292
+ Effect.interruptible,
293
+ Effect.forkScoped
294
+ )
295
+
296
+ return handlers as any
297
+ })
298
+
299
+ return this.toLayer(buildHandlers, {
300
+ ...options,
301
+ concurrency: "unbounded"
302
+ })
303
+ }
304
+ }
305
+
306
+ /**
307
+ * Creates a new `Entity` of the specified `type` which will accept messages
308
+ * that adhere to the provided `RpcGroup`.
309
+ *
310
+ * @since 1.0.0
311
+ * @category constructors
312
+ */
313
+ export const fromRpcGroup = <Rpcs extends Rpc.Any>(
314
+ /**
315
+ * The entity type name.
316
+ */
317
+ type: string,
318
+ /**
319
+ * The schema definition for messages that the entity is capable of
320
+ * processing.
321
+ */
322
+ protocol: RpcGroup.RpcGroup<Rpcs>
323
+ ): Entity<Rpcs> => {
324
+ const self = Object.create(Proto)
325
+ self.type = EntityType.make(type)
326
+ self.protocol = protocol
327
+ return self
328
+ }
329
+
330
+ /**
331
+ * Creates a new `Entity` of the specified `type` which will accept messages
332
+ * that adhere to the provided schemas.
333
+ *
334
+ * @since 1.0.0
335
+ * @category constructors
336
+ */
337
+ export const make = <Rpcs extends ReadonlyArray<Rpc.Any>>(
338
+ /**
339
+ * The entity type name.
340
+ */
341
+ type: string,
342
+ /**
343
+ * The schema definition for messages that the entity is capable of
344
+ * processing.
345
+ */
346
+ protocol: Rpcs
347
+ ): Entity<Rpcs[number]> => fromRpcGroup(type, RpcGroup.make(...protocol))
348
+
349
+ /**
350
+ * A Context.Tag to access the current entity address.
351
+ *
352
+ * @since 1.0.0
353
+ * @category context
354
+ */
355
+ export class CurrentAddress extends Context.Tag("@effect/cluster/Entity/EntityAddress")<
356
+ CurrentAddress,
357
+ EntityAddress
358
+ >() {}
359
+
360
+ /**
361
+ * A Context.Tag to access the current Runner address.
362
+ *
363
+ * @since 1.0.0
364
+ * @category context
365
+ */
366
+ export class CurrentRunnerAddress extends Context.Tag("@effect/cluster/Entity/RunnerAddress")<
367
+ CurrentRunnerAddress,
368
+ RunnerAddress
369
+ >() {}
370
+
371
+ /**
372
+ * @since 1.0.0
373
+ * @category Replier
374
+ */
375
+ export interface Replier<Rpcs extends Rpc.Any> {
376
+ readonly succeed: <R extends Rpcs>(
377
+ request: Envelope.Request<R>,
378
+ value: Replier.Success<R>
379
+ ) => Effect.Effect<void>
380
+
381
+ readonly fail: <R extends Rpcs>(
382
+ request: Envelope.Request<R>,
383
+ error: Rpc.Error<R>
384
+ ) => Effect.Effect<void>
385
+
386
+ readonly failCause: <R extends Rpcs>(
387
+ request: Envelope.Request<R>,
388
+ cause: Cause.Cause<Rpc.Error<R>>
389
+ ) => Effect.Effect<void>
390
+
391
+ readonly complete: <R extends Rpcs>(
392
+ request: Envelope.Request<R>,
393
+ exit: Exit.Exit<Replier.Success<R>, Rpc.Error<R>>
394
+ ) => Effect.Effect<void>
395
+ }
396
+
397
+ /**
398
+ * @since 1.0.0
399
+ * @category Replier
400
+ */
401
+ export declare namespace Replier {
402
+ /**
403
+ * @since 1.0.0
404
+ * @category Replier
405
+ */
406
+ export type Success<R extends Rpc.Any> = Rpc.Success<R> extends Stream.Stream<infer _A, infer _E, infer _R> ?
407
+ Stream.Stream<_A, _E | Rpc.Error<R>, _R> | Mailbox.ReadonlyMailbox<_A, _E | Rpc.Error<R>>
408
+ : Rpc.Success<R>
409
+ }
410
+
411
+ /**
412
+ * @since 1.0.0
413
+ * @category Request
414
+ */
415
+ export class Request<Rpc extends Rpc.Any> extends Data.Class<
416
+ Envelope.Request<Rpc> & {
417
+ readonly lastSentChunk: Option.Option<Reply.Chunk<Rpc>>
418
+ }
419
+ > {
420
+ /**
421
+ * @since 1.0.0
422
+ */
423
+ get lastSentChunkValue(): Option.Option<Rpc.SuccessChunk<Rpc>> {
424
+ return this.lastSentChunk.pipe(Option.map((chunk) => Arr.lastNonEmpty(chunk.values)))
425
+ }
426
+
427
+ /**
428
+ * @since 1.0.0
429
+ */
430
+ get nextSequence(): number {
431
+ if (Option.isNone(this.lastSentChunk)) {
432
+ return 0
433
+ }
434
+ return this.lastSentChunk.value.sequence + 1
435
+ }
436
+ }
437
+
438
+ const shardingTag = Context.GenericTag<Sharding, Sharding["Type"]>("@effect/cluster/Sharding")
@@ -0,0 +1,55 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Hash from "effect/Hash"
5
+ import * as Schema from "effect/Schema"
6
+ import { EntityId } from "./EntityId.js"
7
+ import { EntityType } from "./EntityType.js"
8
+ import { ShardId } from "./ShardId.js"
9
+
10
+ const SymbolKey = "@effect/cluster/EntityAddress"
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category type ids
15
+ */
16
+ export const TypeId: unique symbol = Symbol.for(SymbolKey)
17
+
18
+ /**
19
+ * @since 1.0.0
20
+ * @category type ids
21
+ */
22
+ export type TypeId = typeof TypeId
23
+
24
+ /**
25
+ * Represents the unique address of an entity within the cluster.
26
+ *
27
+ * @since 1.0.0
28
+ * @category models
29
+ */
30
+ export class EntityAddress extends Schema.Class<EntityAddress>(SymbolKey)({
31
+ shardId: ShardId,
32
+ entityType: EntityType,
33
+ entityId: EntityId
34
+ }) {
35
+ /**
36
+ * @since 1.0.0
37
+ */
38
+ readonly [TypeId] = TypeId;
39
+ /**
40
+ * @since 1.0.0
41
+ */
42
+ [Hash.symbol]() {
43
+ return Hash.cached(this)(Hash.string(`${this.shardId}:${this.entityType}:${this.entityId}`))
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Represents the unique address of an entity within the cluster.
49
+ *
50
+ * @since 1.0.0
51
+ * @category schemas
52
+ */
53
+ export const EntityAddressFromSelf: Schema.Schema<EntityAddress> = Schema.typeSchema(
54
+ EntityAddress
55
+ )
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Schema from "effect/Schema"
5
+
6
+ /**
7
+ * @since 1.0.0
8
+ * @category constructors
9
+ */
10
+ export const EntityId = Schema.NonEmptyTrimmedString.pipe(Schema.brand("EntityId"))
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category models
15
+ */
16
+ export type EntityId = typeof EntityId.Type
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Schema from "effect/Schema"
5
+
6
+ /**
7
+ * @since 1.0.0
8
+ * @category constructors
9
+ */
10
+ export const EntityType = Schema.NonEmptyTrimmedString.pipe(Schema.brand("EntityType"))
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category models
15
+ */
16
+ export type EntityType = typeof EntityType.Type