dfx 0.51.0 → 0.51.2

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 (335) hide show
  1. package/Cache/driver.d.ts +17 -16
  2. package/Cache/driver.d.ts.map +1 -1
  3. package/Cache/driver.js +10 -2
  4. package/Cache/driver.js.map +1 -1
  5. package/Cache/memory.d.ts +3 -3
  6. package/Cache/memory.d.ts.map +1 -1
  7. package/Cache/memory.js +55 -45
  8. package/Cache/memory.js.map +1 -1
  9. package/Cache/memoryTTL.d.ts +7 -6
  10. package/Cache/memoryTTL.d.ts.map +1 -1
  11. package/Cache/memoryTTL.js +126 -118
  12. package/Cache/memoryTTL.js.map +1 -1
  13. package/Cache/prelude.d.ts +53 -47
  14. package/Cache/prelude.d.ts.map +1 -1
  15. package/Cache/prelude.js +125 -96
  16. package/Cache/prelude.js.map +1 -1
  17. package/Cache.d.ts +33 -32
  18. package/Cache.d.ts.map +1 -1
  19. package/Cache.js +137 -65
  20. package/Cache.js.map +1 -1
  21. package/DiscordConfig.d.ts +26 -20
  22. package/DiscordConfig.d.ts.map +1 -1
  23. package/DiscordConfig.js +43 -25
  24. package/DiscordConfig.js.map +1 -1
  25. package/DiscordGateway/DiscordWS.d.ts +17 -14
  26. package/DiscordGateway/DiscordWS.d.ts.map +1 -1
  27. package/DiscordGateway/DiscordWS.js +49 -30
  28. package/DiscordGateway/DiscordWS.js.map +1 -1
  29. package/DiscordGateway/Shard/heartbeats.d.ts +7 -3
  30. package/DiscordGateway/Shard/heartbeats.d.ts.map +1 -1
  31. package/DiscordGateway/Shard/heartbeats.js +28 -18
  32. package/DiscordGateway/Shard/heartbeats.js.map +1 -1
  33. package/DiscordGateway/Shard/identify.d.ts +10 -8
  34. package/DiscordGateway/Shard/identify.d.ts.map +1 -1
  35. package/DiscordGateway/Shard/identify.js +41 -24
  36. package/DiscordGateway/Shard/identify.js.map +1 -1
  37. package/DiscordGateway/Shard/invalidSession.d.ts +6 -3
  38. package/DiscordGateway/Shard/invalidSession.d.ts.map +1 -1
  39. package/DiscordGateway/Shard/invalidSession.js +14 -5
  40. package/DiscordGateway/Shard/invalidSession.js.map +1 -1
  41. package/DiscordGateway/Shard/sendEvents.d.ts +1 -1
  42. package/DiscordGateway/Shard/sendEvents.d.ts.map +1 -1
  43. package/DiscordGateway/Shard/sendEvents.js +30 -18
  44. package/DiscordGateway/Shard/sendEvents.js.map +1 -1
  45. package/DiscordGateway/Shard/utils.d.ts +7 -3
  46. package/DiscordGateway/Shard/utils.d.ts.map +1 -1
  47. package/DiscordGateway/Shard/utils.js +19 -9
  48. package/DiscordGateway/Shard/utils.js.map +1 -1
  49. package/DiscordGateway/Shard.d.ts +15 -10
  50. package/DiscordGateway/Shard.d.ts.map +1 -1
  51. package/DiscordGateway/Shard.js +109 -87
  52. package/DiscordGateway/Shard.js.map +1 -1
  53. package/DiscordGateway/ShardStore.d.ts +9 -6
  54. package/DiscordGateway/ShardStore.d.ts.map +1 -1
  55. package/DiscordGateway/ShardStore.js +30 -18
  56. package/DiscordGateway/ShardStore.js.map +1 -1
  57. package/DiscordGateway/Sharder.d.ts +17 -11
  58. package/DiscordGateway/Sharder.d.ts.map +1 -1
  59. package/DiscordGateway/Sharder.js +82 -52
  60. package/DiscordGateway/Sharder.js.map +1 -1
  61. package/DiscordGateway/WS.d.ts +13 -10
  62. package/DiscordGateway/WS.d.ts.map +1 -1
  63. package/DiscordGateway/WS.js +100 -74
  64. package/DiscordGateway/WS.js.map +1 -1
  65. package/DiscordGateway.d.ts +19 -13
  66. package/DiscordGateway.d.ts.map +1 -1
  67. package/DiscordGateway.js +45 -32
  68. package/DiscordGateway.js.map +1 -1
  69. package/DiscordREST/types.d.ts +5 -5
  70. package/DiscordREST/types.d.ts.map +1 -1
  71. package/DiscordREST/types.js +5 -1
  72. package/DiscordREST/types.js.map +1 -1
  73. package/DiscordREST/utils.d.ts +3 -2
  74. package/DiscordREST/utils.d.ts.map +1 -1
  75. package/DiscordREST/utils.js +27 -17
  76. package/DiscordREST/utils.js.map +1 -1
  77. package/DiscordREST.d.ts +11 -8
  78. package/DiscordREST.d.ts.map +1 -1
  79. package/DiscordREST.js +141 -127
  80. package/DiscordREST.js.map +1 -1
  81. package/Helpers/flags.js +31 -19
  82. package/Helpers/flags.js.map +1 -1
  83. package/Helpers/intents.d.ts.map +1 -1
  84. package/Helpers/intents.js +22 -10
  85. package/Helpers/intents.js.map +1 -1
  86. package/Helpers/interactions.d.ts +22 -21
  87. package/Helpers/interactions.d.ts.map +1 -1
  88. package/Helpers/interactions.js +75 -39
  89. package/Helpers/interactions.js.map +1 -1
  90. package/Helpers/members.d.ts +3 -3
  91. package/Helpers/members.d.ts.map +1 -1
  92. package/Helpers/members.js +10 -3
  93. package/Helpers/members.js.map +1 -1
  94. package/Helpers/permissions.d.ts +5 -4
  95. package/Helpers/permissions.d.ts.map +1 -1
  96. package/Helpers/permissions.js +69 -52
  97. package/Helpers/permissions.js.map +1 -1
  98. package/Helpers/ui.d.ts +1 -1
  99. package/Helpers/ui.d.ts.map +1 -1
  100. package/Helpers/ui.js +44 -29
  101. package/Helpers/ui.js.map +1 -1
  102. package/Interactions/builder.d.ts +20 -19
  103. package/Interactions/builder.d.ts.map +1 -1
  104. package/Interactions/builder.js +66 -63
  105. package/Interactions/builder.js.map +1 -1
  106. package/Interactions/context.d.ts +26 -23
  107. package/Interactions/context.d.ts.map +1 -1
  108. package/Interactions/context.js +86 -57
  109. package/Interactions/context.js.map +1 -1
  110. package/Interactions/definitions.d.ts +33 -30
  111. package/Interactions/definitions.d.ts.map +1 -1
  112. package/Interactions/definitions.js +61 -47
  113. package/Interactions/definitions.js.map +1 -1
  114. package/Interactions/gateway.d.ts +15 -10
  115. package/Interactions/gateway.d.ts.map +1 -1
  116. package/Interactions/gateway.js +55 -42
  117. package/Interactions/gateway.js.map +1 -1
  118. package/Interactions/handlers.d.ts +6 -4
  119. package/Interactions/handlers.d.ts.map +1 -1
  120. package/Interactions/handlers.js +68 -57
  121. package/Interactions/handlers.js.map +1 -1
  122. package/Interactions/index.d.ts +11 -10
  123. package/Interactions/index.d.ts.map +1 -1
  124. package/Interactions/index.js +95 -10
  125. package/Interactions/index.js.map +1 -1
  126. package/Interactions/utils.d.ts +42 -40
  127. package/Interactions/utils.d.ts.map +1 -1
  128. package/Interactions/utils.js +40 -32
  129. package/Interactions/utils.js.map +1 -1
  130. package/Interactions/webhook.d.ts +20 -16
  131. package/Interactions/webhook.d.ts.map +1 -1
  132. package/Interactions/webhook.js +73 -41
  133. package/Interactions/webhook.js.map +1 -1
  134. package/Log.d.ts +8 -5
  135. package/Log.d.ts.map +1 -1
  136. package/Log.js +23 -14
  137. package/Log.js.map +1 -1
  138. package/RateLimit/memory.d.ts +1 -1
  139. package/RateLimit/memory.d.ts.map +1 -1
  140. package/RateLimit/memory.js +46 -33
  141. package/RateLimit/memory.js.map +1 -1
  142. package/RateLimit/utils.d.ts +1 -1
  143. package/RateLimit/utils.d.ts.map +1 -1
  144. package/RateLimit/utils.js +23 -16
  145. package/RateLimit/utils.js.map +1 -1
  146. package/RateLimit.d.ts +18 -14
  147. package/RateLimit.d.ts.map +1 -1
  148. package/RateLimit.js +40 -26
  149. package/RateLimit.js.map +1 -1
  150. package/gateway.d.ts +20 -13
  151. package/gateway.d.ts.map +1 -1
  152. package/gateway.js +72 -25
  153. package/gateway.js.map +1 -1
  154. package/index.d.ts +14 -13
  155. package/index.d.ts.map +1 -1
  156. package/index.js +71 -13
  157. package/index.js.map +1 -1
  158. package/mjs/Cache/driver.mjs +3 -0
  159. package/mjs/Cache/driver.mjs.map +1 -0
  160. package/mjs/Cache/memory.mjs +48 -0
  161. package/mjs/Cache/memory.mjs.map +1 -0
  162. package/mjs/Cache/memoryTTL.mjs +119 -0
  163. package/mjs/Cache/memoryTTL.mjs.map +1 -0
  164. package/mjs/Cache/prelude.mjs +125 -0
  165. package/mjs/Cache/prelude.mjs.map +1 -0
  166. package/mjs/Cache.mjs +87 -0
  167. package/mjs/Cache.mjs.map +1 -0
  168. package/mjs/DiscordConfig.mjs +34 -0
  169. package/mjs/DiscordConfig.mjs.map +1 -0
  170. package/mjs/DiscordGateway/DiscordWS.mjs +39 -0
  171. package/mjs/DiscordGateway/DiscordWS.mjs.map +1 -0
  172. package/mjs/DiscordGateway/Shard/heartbeats.mjs +21 -0
  173. package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +1 -0
  174. package/mjs/DiscordGateway/Shard/identify.mjs +37 -0
  175. package/mjs/DiscordGateway/Shard/identify.mjs.map +1 -0
  176. package/mjs/DiscordGateway/Shard/invalidSession.mjs +6 -0
  177. package/mjs/DiscordGateway/Shard/invalidSession.mjs.map +1 -0
  178. package/mjs/DiscordGateway/Shard/sendEvents.mjs +25 -0
  179. package/mjs/DiscordGateway/Shard/sendEvents.mjs.map +1 -0
  180. package/mjs/DiscordGateway/Shard/utils.mjs +11 -0
  181. package/mjs/DiscordGateway/Shard/utils.mjs.map +1 -0
  182. package/mjs/DiscordGateway/Shard.mjs +99 -0
  183. package/mjs/DiscordGateway/Shard.mjs.map +1 -0
  184. package/mjs/DiscordGateway/ShardStore.mjs +24 -0
  185. package/mjs/DiscordGateway/ShardStore.mjs.map +1 -0
  186. package/mjs/DiscordGateway/Sharder.mjs +73 -0
  187. package/mjs/DiscordGateway/Sharder.mjs.map +1 -0
  188. package/mjs/DiscordGateway/WS.mjs +94 -0
  189. package/mjs/DiscordGateway/WS.mjs.map +1 -0
  190. package/mjs/DiscordGateway.mjs +36 -0
  191. package/mjs/DiscordGateway.mjs.map +1 -0
  192. package/mjs/DiscordREST/types.mjs +2 -0
  193. package/mjs/DiscordREST/types.mjs.map +1 -0
  194. package/mjs/DiscordREST/utils.mjs +19 -0
  195. package/mjs/DiscordREST/utils.mjs.map +1 -0
  196. package/mjs/DiscordREST.mjs +129 -0
  197. package/mjs/DiscordREST.mjs.map +1 -0
  198. package/mjs/Helpers/flags.mjs +36 -0
  199. package/mjs/Helpers/flags.mjs.map +1 -0
  200. package/mjs/Helpers/intents.mjs +27 -0
  201. package/mjs/Helpers/intents.mjs.map +1 -0
  202. package/mjs/Helpers/interactions.mjs +104 -0
  203. package/mjs/Helpers/interactions.mjs.map +1 -0
  204. package/mjs/Helpers/members.mjs +9 -0
  205. package/mjs/Helpers/members.mjs.map +1 -0
  206. package/mjs/Helpers/permissions.mjs +82 -0
  207. package/mjs/Helpers/permissions.mjs.map +1 -0
  208. package/mjs/Helpers/ui.mjs +66 -0
  209. package/mjs/Helpers/ui.mjs.map +1 -0
  210. package/mjs/Interactions/builder.mjs +62 -0
  211. package/mjs/Interactions/builder.mjs.map +1 -0
  212. package/mjs/Interactions/context.mjs +63 -0
  213. package/mjs/Interactions/context.mjs.map +1 -0
  214. package/mjs/Interactions/definitions.mjs +51 -0
  215. package/mjs/Interactions/definitions.mjs.map +1 -0
  216. package/mjs/Interactions/gateway.mjs +48 -0
  217. package/mjs/Interactions/gateway.mjs.map +1 -0
  218. package/mjs/Interactions/handlers.mjs +61 -0
  219. package/mjs/Interactions/handlers.mjs.map +1 -0
  220. package/mjs/Interactions/index.mjs +12 -0
  221. package/mjs/Interactions/index.mjs.map +1 -0
  222. package/mjs/Interactions/utils.mjs +35 -0
  223. package/mjs/Interactions/utils.mjs.map +1 -0
  224. package/mjs/Interactions/webhook.mjs +73 -0
  225. package/mjs/Interactions/webhook.mjs.map +1 -0
  226. package/mjs/Log.mjs +15 -0
  227. package/mjs/Log.mjs.map +1 -0
  228. package/mjs/RateLimit/memory.mjs +39 -0
  229. package/mjs/RateLimit/memory.mjs.map +1 -0
  230. package/mjs/RateLimit/utils.mjs +18 -0
  231. package/mjs/RateLimit/utils.mjs.map +1 -0
  232. package/mjs/RateLimit.mjs +29 -0
  233. package/mjs/RateLimit.mjs.map +1 -0
  234. package/mjs/gateway.mjs +27 -0
  235. package/mjs/gateway.mjs.map +1 -0
  236. package/mjs/index.mjs +15 -0
  237. package/mjs/index.mjs.map +1 -0
  238. package/mjs/types.mjs +1211 -0
  239. package/mjs/types.mjs.map +1 -0
  240. package/mjs/utils/Effect.mjs +28 -0
  241. package/mjs/utils/Effect.mjs.map +1 -0
  242. package/mjs/utils/tsplus.mjs +2 -0
  243. package/mjs/utils/tsplus.mjs.map +1 -0
  244. package/mjs/version.mjs +2 -0
  245. package/mjs/version.mjs.map +1 -0
  246. package/mjs/webhooks.mjs +30 -0
  247. package/mjs/webhooks.mjs.map +1 -0
  248. package/package.json +46 -50
  249. package/src/Cache/driver.ts +27 -15
  250. package/src/Cache/memory.ts +9 -5
  251. package/src/Cache/memoryTTL.ts +69 -53
  252. package/src/Cache/prelude.ts +113 -91
  253. package/src/Cache.ts +73 -58
  254. package/src/DiscordConfig.ts +33 -19
  255. package/src/DiscordGateway/DiscordWS.ts +28 -25
  256. package/src/DiscordGateway/Shard/heartbeats.ts +47 -27
  257. package/src/DiscordGateway/Shard/identify.ts +29 -25
  258. package/src/DiscordGateway/Shard/invalidSession.ts +9 -7
  259. package/src/DiscordGateway/Shard/sendEvents.ts +1 -1
  260. package/src/DiscordGateway/Shard/utils.ts +33 -9
  261. package/src/DiscordGateway/Shard.ts +119 -99
  262. package/src/DiscordGateway/ShardStore.ts +12 -5
  263. package/src/DiscordGateway/Sharder.ts +95 -74
  264. package/src/DiscordGateway/WS.ts +85 -60
  265. package/src/DiscordGateway.ts +58 -18
  266. package/src/DiscordREST/types.ts +5 -5
  267. package/src/DiscordREST/utils.ts +10 -7
  268. package/src/DiscordREST.ts +152 -132
  269. package/src/Helpers/intents.ts +1 -0
  270. package/src/Helpers/interactions.ts +51 -38
  271. package/src/Helpers/members.ts +2 -0
  272. package/src/Helpers/permissions.ts +6 -5
  273. package/src/Helpers/ui.ts +1 -1
  274. package/src/Interactions/builder.ts +56 -43
  275. package/src/Interactions/context.ts +68 -38
  276. package/src/Interactions/definitions.ts +32 -24
  277. package/src/Interactions/gateway.ts +72 -47
  278. package/src/Interactions/handlers.ts +56 -39
  279. package/src/Interactions/index.ts +6 -5
  280. package/src/Interactions/utils.ts +32 -21
  281. package/src/Interactions/webhook.ts +78 -42
  282. package/src/Log.ts +4 -0
  283. package/src/RateLimit/memory.ts +10 -4
  284. package/src/RateLimit/utils.ts +1 -1
  285. package/src/RateLimit.ts +38 -25
  286. package/src/gateway.ts +62 -25
  287. package/src/index.ts +29 -15
  288. package/src/utils/Effect.ts +69 -0
  289. package/src/version.ts +1 -0
  290. package/src/webhooks.ts +47 -20
  291. package/tsconfig.base.json +48 -0
  292. package/tsconfig.build.json +10 -0
  293. package/tsconfig.examples.json +11 -0
  294. package/tsconfig.json +12 -8
  295. package/tsconfig.madge.json +12 -0
  296. package/tsconfig.test.json +10 -0
  297. package/types.d.ts.map +1 -1
  298. package/types.js +1216 -1200
  299. package/types.js.map +1 -1
  300. package/utils/Effect.d.ts +8 -0
  301. package/utils/Effect.d.ts.map +1 -0
  302. package/utils/Effect.js +38 -0
  303. package/utils/Effect.js.map +1 -0
  304. package/utils/tsplus.js +5 -1
  305. package/utils/tsplus.js.map +1 -1
  306. package/version.d.ts +2 -0
  307. package/version.d.ts.map +1 -0
  308. package/version.js +9 -0
  309. package/version.js.map +1 -0
  310. package/webhooks.d.ts +14 -9
  311. package/webhooks.d.ts.map +1 -1
  312. package/webhooks.js +76 -27
  313. package/webhooks.js.map +1 -1
  314. package/_common.d.ts +0 -37
  315. package/_common.d.ts.map +0 -1
  316. package/_common.js +0 -8
  317. package/_common.js.map +0 -1
  318. package/global.d.ts +0 -18
  319. package/global.d.ts.map +0 -1
  320. package/global.js +0 -2
  321. package/global.js.map +0 -1
  322. package/src/_common.ts +0 -43
  323. package/src/global.ts +0 -45
  324. package/src/package.json +0 -52
  325. package/src/utils/effect.ts +0 -0
  326. package/src/utils/hub.ts +0 -47
  327. package/tsplus.config.json +0 -8
  328. package/utils/effect.d.ts +0 -2
  329. package/utils/effect.d.ts.map +0 -1
  330. package/utils/effect.js +0 -2
  331. package/utils/effect.js.map +0 -1
  332. package/utils/hub.d.ts +0 -12
  333. package/utils/hub.d.ts.map +0 -1
  334. package/utils/hub.js +0 -26
  335. package/utils/hub.js.map +0 -1
@@ -1,34 +1,38 @@
1
+ import * as Effect from "@effect/io/Effect"
2
+ import * as Stream from "@effect/stream/Stream"
1
3
  import { DiscordREST } from "dfx"
2
- import { Discord, Effect, Stream } from "dfx/_common"
3
- import { DiscordGateway } from "dfx/gateway"
4
- import {
4
+ import type {
5
5
  CacheDriver,
6
- CacheMissError,
7
6
  CacheOp,
8
7
  ParentCacheDriver,
9
8
  ParentCacheOp,
10
- make,
11
- makeWithParent,
12
- } from "../Cache.js"
9
+ } from "dfx/Cache"
10
+ import { CacheMissError, make, makeWithParent } from "dfx/Cache"
11
+ import { DiscordGateway } from "dfx/DiscordGateway"
12
+ import type * as Discord from "dfx/types"
13
13
 
14
14
  export interface OptsWithParentOptions<E, A> {
15
- id: (a: A) => string
16
- fromParent: Stream<never, E, [parentId: string, resources: A[]]>
17
- create: Stream<never, E, [parentId: string, resource: A]>
18
- update: Stream<never, E, [parentId: string, resource: A]>
19
- remove: Stream<never, E, [parentId: string, id: string]>
20
- parentRemove: Stream<never, E, string>
15
+ readonly id: (a: A) => string
16
+ readonly fromParent: Stream.Stream<
17
+ never,
18
+ E,
19
+ [parentId: string, resources: Array<A>]
20
+ >
21
+ readonly create: Stream.Stream<never, E, [parentId: string, resource: A]>
22
+ readonly update: Stream.Stream<never, E, [parentId: string, resource: A]>
23
+ readonly remove: Stream.Stream<never, E, [parentId: string, id: string]>
24
+ readonly parentRemove: Stream.Stream<never, E, string>
21
25
  }
22
26
 
23
27
  export const opsWithParent = <E, T>({
24
- id,
25
- fromParent,
26
28
  create,
27
- update,
28
- remove,
29
+ fromParent,
30
+ id,
29
31
  parentRemove,
32
+ remove,
33
+ update,
30
34
  }: OptsWithParentOptions<E, T>) => {
31
- const fromParentOps = fromParent.flatMap(([parentId, a]) =>
35
+ const fromParentOps = Stream.flatMap(fromParent, ([parentId, a]) =>
32
36
  Stream.fromIterable(
33
37
  a.map(
34
38
  (resource): ParentCacheOp<T> => ({
@@ -41,7 +45,8 @@ export const opsWithParent = <E, T>({
41
45
  ),
42
46
  )
43
47
 
44
- const createOps = create.map(
48
+ const createOps = Stream.map(
49
+ create,
45
50
  ([parentId, resource]): ParentCacheOp<T> => ({
46
51
  op: "create",
47
52
  parentId,
@@ -50,7 +55,8 @@ export const opsWithParent = <E, T>({
50
55
  }),
51
56
  )
52
57
 
53
- const updateOps = update.map(
58
+ const updateOps = Stream.map(
59
+ update,
54
60
  ([parentId, resource]): ParentCacheOp<T> => ({
55
61
  op: "update",
56
62
  parentId,
@@ -59,7 +65,8 @@ export const opsWithParent = <E, T>({
59
65
  }),
60
66
  )
61
67
 
62
- const removeOps = remove.map(
68
+ const removeOps = Stream.map(
69
+ remove,
63
70
  ([parentId, resourceId]): ParentCacheOp<T> => ({
64
71
  op: "delete",
65
72
  parentId,
@@ -67,29 +74,31 @@ export const opsWithParent = <E, T>({
67
74
  }),
68
75
  )
69
76
 
70
- const parentRemoveOps = parentRemove.map(
77
+ const parentRemoveOps = Stream.map(
78
+ parentRemove,
71
79
  (parentId): ParentCacheOp<T> => ({
72
80
  op: "parentDelete",
73
81
  parentId,
74
82
  }),
75
83
  )
76
84
 
77
- return fromParentOps
78
- .merge(createOps)
79
- .merge(updateOps)
80
- .merge(removeOps)
81
- .merge(parentRemoveOps)
85
+ return Stream.merge(fromParentOps, createOps).pipe(
86
+ Stream.merge(updateOps),
87
+ Stream.merge(removeOps),
88
+ Stream.merge(parentRemoveOps),
89
+ )
82
90
  }
83
91
 
84
92
  export interface OpsOptions<E, A> {
85
93
  id: (a: A) => string
86
- create: Stream<never, E, A>
87
- update: Stream<never, E, A>
88
- remove: Stream<never, E, string>
94
+ create: Stream.Stream<never, E, A>
95
+ update: Stream.Stream<never, E, A>
96
+ remove: Stream.Stream<never, E, string>
89
97
  }
90
98
 
91
- export const ops = <E, T>({ id, create, update, remove }: OpsOptions<E, T>) => {
92
- const createOps = create.map(
99
+ export const ops = <E, T>({ create, id, remove, update }: OpsOptions<E, T>) => {
100
+ const createOps = Stream.map(
101
+ create,
93
102
  (resource): CacheOp<T> => ({
94
103
  op: "create",
95
104
  resourceId: id(resource),
@@ -97,7 +106,8 @@ export const ops = <E, T>({ id, create, update, remove }: OpsOptions<E, T>) => {
97
106
  }),
98
107
  )
99
108
 
100
- const updateOps = update.map(
109
+ const updateOps = Stream.map(
110
+ update,
101
111
  (resource): CacheOp<T> => ({
102
112
  op: "update",
103
113
  resourceId: id(resource),
@@ -105,30 +115,31 @@ export const ops = <E, T>({ id, create, update, remove }: OpsOptions<E, T>) => {
105
115
  }),
106
116
  )
107
117
 
108
- const removeOps = remove.map(
118
+ const removeOps = Stream.map(
119
+ remove,
109
120
  (resourceId): CacheOp<T> => ({
110
121
  op: "delete",
111
122
  resourceId,
112
123
  }),
113
124
  )
114
125
 
115
- return createOps.merge(updateOps).merge(removeOps)
126
+ return Stream.merge(createOps, updateOps).pipe(Stream.merge(removeOps))
116
127
  }
117
128
 
118
129
  export const guilds = <RM, EM, E>(
119
- makeDriver: Effect<RM, EM, CacheDriver<E, Discord.Guild>>,
130
+ makeDriver: Effect.Effect<RM, EM, CacheDriver<E, Discord.Guild>>,
120
131
  ) =>
121
- Do($ => {
122
- const driver = $(makeDriver)
123
- const gateway = $(DiscordGateway.accessWith(identity))
124
- const rest = $(DiscordREST.accessWith(identity))
132
+ Effect.gen(function* (_) {
133
+ const driver = yield* _(makeDriver)
134
+ const gateway = yield* _(DiscordGateway)
135
+ const rest = yield* _(DiscordREST)
125
136
 
126
137
  return make({
127
138
  driver,
128
139
  id: _ => _.id,
129
140
  ops: ops({
130
141
  id: (g: Discord.Guild) => g.id,
131
- create: gateway.fromDispatch("GUILD_CREATE").map(g => ({
142
+ create: Stream.map(gateway.fromDispatch("GUILD_CREATE"), g => ({
132
143
  ...g,
133
144
  channels: [],
134
145
  roles: [],
@@ -136,83 +147,94 @@ export const guilds = <RM, EM, E>(
136
147
  members: [],
137
148
  })),
138
149
  update: gateway.fromDispatch("GUILD_UPDATE"),
139
- remove: gateway.fromDispatch("GUILD_DELETE").map(a => a.id),
150
+ remove: Stream.map(gateway.fromDispatch("GUILD_DELETE"), a => a.id),
140
151
  }),
141
- onMiss: id => rest.getGuild(id).flatMap(r => r.json),
152
+ onMiss: id => Effect.flatMap(rest.getGuild(id), r => r.json),
142
153
  })
143
154
  })
144
155
 
145
156
  export const channels = <RM, EM, E>(
146
- makeDriver: Effect<RM, EM, ParentCacheDriver<E, Discord.Channel>>,
157
+ makeDriver: Effect.Effect<RM, EM, ParentCacheDriver<E, Discord.Channel>>,
147
158
  ) =>
148
- Do($ => {
149
- const driver = $(makeDriver)
150
- const gateway = $(DiscordGateway.accessWith(identity))
151
- const rest = $(DiscordREST.accessWith(identity))
159
+ Effect.gen(function* (_) {
160
+ const driver = yield* _(makeDriver)
161
+ const gateway = yield* _(DiscordGateway)
162
+ const rest = yield* _(DiscordREST)
152
163
 
153
164
  return makeWithParent({
154
165
  driver,
155
166
  id: _ => Effect.succeed([_.guild_id!, _.id]),
156
167
  ops: opsWithParent({
157
168
  id: (a: Discord.Channel) => a.id,
158
- fromParent: gateway
159
- .fromDispatch("GUILD_CREATE")
160
- .map(g => [g.id, g.channels.concat(g.threads)]),
161
- create: gateway
162
- .fromDispatch("CHANNEL_CREATE")
163
- .merge(gateway.fromDispatch("THREAD_CREATE"))
164
- .map(c => [c.guild_id!, c]),
165
- update: gateway
166
- .fromDispatch("CHANNEL_UPDATE")
167
- .merge(gateway.fromDispatch("THREAD_UPDATE"))
168
- .map(c => [c.guild_id!, c]),
169
- remove: gateway
170
- .fromDispatch("CHANNEL_DELETE")
171
- .merge(gateway.fromDispatch("THREAD_DELETE"))
172
- .map(a => [a.guild_id!, a.id]),
173
- parentRemove: gateway.fromDispatch("GUILD_DELETE").map(g => g.id),
169
+ fromParent: Stream.map(gateway.fromDispatch("GUILD_CREATE"), g => [
170
+ g.id,
171
+ g.channels.concat(g.threads),
172
+ ]),
173
+ create: Stream.merge(
174
+ gateway.fromDispatch("CHANNEL_CREATE"),
175
+ gateway.fromDispatch("THREAD_CREATE"),
176
+ ).pipe(Stream.map(c => [c.guild_id!, c])),
177
+ update: Stream.merge(
178
+ gateway.fromDispatch("CHANNEL_UPDATE"),
179
+ gateway.fromDispatch("THREAD_UPDATE"),
180
+ ).pipe(Stream.map(c => [c.guild_id!, c])),
181
+ remove: Stream.merge(
182
+ gateway.fromDispatch("CHANNEL_DELETE"),
183
+ gateway.fromDispatch("THREAD_DELETE"),
184
+ ).pipe(Stream.map(a => [a.guild_id!, a.id])),
185
+ parentRemove: Stream.map(
186
+ gateway.fromDispatch("GUILD_DELETE"),
187
+ g => g.id,
188
+ ),
174
189
  }),
175
- onMiss: (_, id) => rest.getChannel(id).flatMap(r => r.json),
190
+ onMiss: (_, id) => Effect.flatMap(rest.getChannel(id), r => r.json),
176
191
  onParentMiss: guildId =>
177
- rest
178
- .getGuildChannels(guildId)
179
- .flatMap(r => r.json)
180
- .map(a => a.map(a => [a.id, a])),
192
+ rest.getGuildChannels(guildId).pipe(
193
+ Effect.flatMap(r => r.json),
194
+ Effect.map(a => a.map(a => [a.id, a])),
195
+ ),
181
196
  })
182
197
  })
183
198
 
184
199
  export const roles = <RM, EM, E>(
185
- makeDriver: Effect<RM, EM, ParentCacheDriver<E, Discord.Role>>,
200
+ makeDriver: Effect.Effect<RM, EM, ParentCacheDriver<E, Discord.Role>>,
186
201
  ) =>
187
- Do($ => {
188
- const driver = $(makeDriver)
189
- const gateway = $(DiscordGateway.accessWith(identity))
190
- const rest = $(DiscordREST.accessWith(identity))
202
+ Effect.gen(function* (_) {
203
+ const driver = yield* _(makeDriver)
204
+ const gateway = yield* _(DiscordGateway)
205
+ const rest = yield* _(DiscordREST)
191
206
 
192
207
  return makeWithParent({
193
208
  driver,
194
209
  id: _ => Effect.fail(new CacheMissError("RolesCache/id", _.id)),
195
210
  ops: opsWithParent({
196
211
  id: (a: Discord.Role) => a.id,
197
- fromParent: gateway
198
- .fromDispatch("GUILD_CREATE")
199
- .map(g => [g.id, g.roles]),
200
- create: gateway
201
- .fromDispatch("GUILD_ROLE_CREATE")
202
- .map(r => [r.guild_id, r.role]),
203
- update: gateway
204
- .fromDispatch("GUILD_ROLE_UPDATE")
205
- .map(r => [r.guild_id, r.role]),
206
- remove: gateway
207
- .fromDispatch("GUILD_ROLE_DELETE")
208
- .map(r => [r.guild_id, r.role_id]),
209
- parentRemove: gateway.fromDispatch("GUILD_DELETE").map(g => g.id),
212
+ fromParent: Stream.map(gateway.fromDispatch("GUILD_CREATE"), g => [
213
+ g.id,
214
+ g.roles,
215
+ ]),
216
+ create: Stream.map(gateway.fromDispatch("GUILD_ROLE_CREATE"), r => [
217
+ r.guild_id,
218
+ r.role,
219
+ ]),
220
+ update: Stream.map(gateway.fromDispatch("GUILD_ROLE_UPDATE"), r => [
221
+ r.guild_id,
222
+ r.role,
223
+ ]),
224
+ remove: Stream.map(gateway.fromDispatch("GUILD_ROLE_DELETE"), r => [
225
+ r.guild_id,
226
+ r.role_id,
227
+ ]),
228
+ parentRemove: Stream.map(
229
+ gateway.fromDispatch("GUILD_DELETE"),
230
+ g => g.id,
231
+ ),
210
232
  }),
211
233
  onMiss: (_, id) => Effect.fail(new CacheMissError("RolesCache", id)),
212
234
  onParentMiss: guildId =>
213
- rest
214
- .getGuildRoles(guildId)
215
- .flatMap(r => r.json)
216
- .map(_ => _.map(role => [role.id, role])),
235
+ rest.getGuildRoles(guildId).pipe(
236
+ Effect.flatMap(r => r.json),
237
+ Effect.map(_ => _.map(role => [role.id, role])),
238
+ ),
217
239
  })
218
240
  })
package/src/Cache.ts CHANGED
@@ -1,14 +1,17 @@
1
- import { CacheDriver, ParentCacheDriver } from "./Cache/driver.js"
1
+ import type { CacheDriver, ParentCacheDriver } from "dfx/Cache/driver"
2
+ import * as Effect from "@effect/io/Effect"
3
+ import * as Option from "@effect/data/Option"
4
+ import * as Stream from "@effect/stream/Stream"
2
5
 
3
- export * from "./Cache/driver.js"
6
+ export * from "dfx/Cache/driver"
4
7
  export {
5
8
  create as memoryDriver,
6
9
  createWithParent as memoryParentDriver,
7
- } from "./Cache/memory.js"
10
+ } from "dfx/Cache/memory"
8
11
  export {
9
12
  create as memoryTTLDriver,
10
13
  createWithParent as memoryTTLParentDriver,
11
- } from "./Cache/memoryTTL.js"
14
+ } from "dfx/Cache/memoryTTL"
12
15
 
13
16
  export type ParentCacheOp<T> =
14
17
  | { op: "create"; parentId: string; resourceId: string; resource: T }
@@ -23,53 +26,59 @@ export type CacheOp<T> =
23
26
 
24
27
  export const makeWithParent = <EOps, EDriver, EMiss, EPMiss, A>({
25
28
  driver,
26
- ops = Stream.empty,
27
29
  id,
28
30
  onMiss,
29
31
  onParentMiss,
32
+ ops = Stream.empty,
30
33
  }: {
31
34
  driver: ParentCacheDriver<EDriver, A>
32
- ops?: Stream<never, EOps, ParentCacheOp<A>>
33
- id: (_: A) => Effect<never, EMiss, readonly [parentId: string, id: string]>
34
- onMiss: (parentId: string, id: string) => Effect<never, EMiss, A>
35
+ ops?: Stream.Stream<never, EOps, ParentCacheOp<A>>
36
+ id: (
37
+ _: A,
38
+ ) => Effect.Effect<never, EMiss, readonly [parentId: string, id: string]>
39
+ onMiss: (parentId: string, id: string) => Effect.Effect<never, EMiss, A>
35
40
  onParentMiss: (
36
41
  parentId: string,
37
- ) => Effect<never, EPMiss, [id: string, resource: A][]>
42
+ ) => Effect.Effect<never, EPMiss, Array<[id: string, resource: A]>>
38
43
  }) => {
39
- const sync = ops.tap((op): Effect<never, EDriver, void> => {
40
- switch (op.op) {
41
- case "create":
42
- case "update":
43
- return driver.set(op.parentId, op.resourceId, op.resource)
44
-
45
- case "delete":
46
- return driver.delete(op.parentId, op.resourceId)
47
-
48
- case "parentDelete":
49
- return driver.parentDelete(op.parentId)
50
- }
51
- }).runDrain
44
+ const sync = Stream.runDrain(
45
+ Stream.tap(ops, (op): Effect.Effect<never, EDriver, void> => {
46
+ switch (op.op) {
47
+ case "create":
48
+ case "update":
49
+ return driver.set(op.parentId, op.resourceId, op.resource)
50
+
51
+ case "delete":
52
+ return driver.delete(op.parentId, op.resourceId)
53
+
54
+ case "parentDelete":
55
+ return driver.parentDelete(op.parentId)
56
+ }
57
+ }),
58
+ )
52
59
 
53
60
  const get = (parentId: string, id: string) =>
54
- driver.get(parentId, id).flatMap(_ =>
55
- _.match({
61
+ Effect.flatMap(
62
+ driver.get(parentId, id),
63
+ Option.match({
56
64
  onNone: () =>
57
- onMiss(parentId, id).tap(a => driver.set(parentId, id, a)),
65
+ Effect.tap(onMiss(parentId, id), a => driver.set(parentId, id, a)),
58
66
  onSome: Effect.succeed,
59
67
  }),
60
68
  )
61
69
 
62
70
  const put = (_: A) =>
63
- id(_).flatMap(([parentId, id]) => driver.set(parentId, id, _))
71
+ Effect.flatMap(id(_), ([parentId, id]) => driver.set(parentId, id, _))
64
72
 
65
73
  const update = <R, E>(
66
74
  parentId: string,
67
75
  id: string,
68
- f: (_: A) => Effect<R, E, A>,
76
+ f: (_: A) => Effect.Effect<R, E, A>,
69
77
  ) =>
70
- get(parentId, id)
71
- .flatMap(f)
72
- .tap(_ => driver.set(parentId, id, _))
78
+ get(parentId, id).pipe(
79
+ Effect.flatMap(f),
80
+ Effect.tap(_ => driver.set(parentId, id, _)),
81
+ )
73
82
 
74
83
  return {
75
84
  ...driver,
@@ -79,68 +88,74 @@ export const makeWithParent = <EOps, EDriver, EMiss, EPMiss, A>({
79
88
  update,
80
89
 
81
90
  getForParent: (parentId: string) =>
82
- driver.getForParent(parentId).flatMap(_ =>
83
- _.match({
91
+ Effect.flatMap(
92
+ driver.getForParent(parentId),
93
+ Option.match({
84
94
  onNone: () =>
85
- onParentMiss(parentId)
86
- .tap(entries =>
95
+ onParentMiss(parentId).pipe(
96
+ Effect.tap(entries =>
87
97
  Effect.all(
88
98
  entries.map(([id, a]) => driver.set(parentId, id, a)),
89
99
  { concurrency: "unbounded" },
90
100
  ),
91
- )
92
- .map(entries => new Map(entries) as ReadonlyMap<string, A>),
101
+ ),
102
+ Effect.map(entries => new Map(entries) as ReadonlyMap<string, A>),
103
+ ),
93
104
  onSome: Effect.succeed,
94
105
  }),
95
106
  ),
96
107
 
97
- run: sync.zipRight(driver.run, { parallel: true }),
108
+ run: Effect.zipRight(sync, driver.run, { parallel: true }),
98
109
  }
99
110
  }
100
111
 
101
112
  export const make = <EOps, EDriver, EMiss, A>({
102
113
  driver,
103
- ops = Stream.empty,
104
114
  id,
105
115
  onMiss,
116
+ ops = Stream.empty,
106
117
  }: {
107
118
  driver: CacheDriver<EDriver, A>
108
- ops?: Stream<never, EOps, CacheOp<A>>
119
+ ops?: Stream.Stream<never, EOps, CacheOp<A>>
109
120
  id: (_: A) => string
110
- onMiss: (id: string) => Effect<never, EMiss, A>
121
+ onMiss: (id: string) => Effect.Effect<never, EMiss, A>
111
122
  }) => {
112
- const sync = ops.tap((op): Effect<never, EDriver, void> => {
113
- switch (op.op) {
114
- case "create":
115
- case "update":
116
- return driver.set(op.resourceId, op.resource)
117
-
118
- case "delete":
119
- return driver.delete(op.resourceId)
120
- }
121
- }).runDrain
123
+ const sync = Stream.runDrain(
124
+ Stream.tap(ops, (op): Effect.Effect<never, EDriver, void> => {
125
+ switch (op.op) {
126
+ case "create":
127
+ case "update":
128
+ return driver.set(op.resourceId, op.resource)
129
+
130
+ case "delete":
131
+ return driver.delete(op.resourceId)
132
+ }
133
+ }),
134
+ )
122
135
 
123
136
  const get = (id: string) =>
124
- driver.get(id).flatMap(_ =>
125
- _.match({
126
- onNone: () => onMiss(id).tap(a => driver.set(id, a)),
137
+ Effect.flatMap(
138
+ driver.get(id),
139
+ Option.match({
140
+ onNone: () => Effect.tap(onMiss(id), a => driver.set(id, a)),
127
141
  onSome: Effect.succeed,
128
142
  }),
129
143
  )
130
144
 
131
145
  const put = (_: A) => driver.set(id(_), _)
132
146
 
133
- const update = <R, E>(id: string, f: (_: A) => Effect<R, E, A>) =>
134
- get(id)
135
- .flatMap(f)
136
- .tap(_ => driver.set(id, _))
147
+ const update = <R, E>(id: string, f: (_: A) => Effect.Effect<R, E, A>) =>
148
+ get(id).pipe(
149
+ Effect.flatMap(f),
150
+ Effect.tap(_ => driver.set(id, _)),
151
+ )
137
152
 
138
153
  return {
139
154
  ...driver,
140
155
  get,
141
156
  put,
142
157
  update,
143
- run: sync.zipRight(driver.run, { parallel: true }),
158
+ run: Effect.zipRight(sync, driver.run, { parallel: true }),
144
159
  }
145
160
  }
146
161
 
@@ -1,30 +1,39 @@
1
+ import { Tag } from "@effect/data/Context"
2
+ import * as Duration from "@effect/data/Duration"
3
+ import * as Config from "@effect/io/Config"
4
+ import * as ConfigError from "@effect/io/Config/Error"
5
+ import * as ConfigSecret from "@effect/io/Config/Secret"
6
+ import * as Effect from "@effect/io/Effect"
7
+ import * as Layer from "@effect/io/Layer"
8
+ import * as Discord from "dfx/types"
9
+
1
10
  const VERSION = 10
2
11
 
3
12
  export interface DiscordConfig {
4
- token: ConfigSecret
5
- debug: boolean
6
- rest: {
7
- baseUrl: string
8
- globalRateLimit: {
9
- limit: number
10
- window: Duration
13
+ readonly token: ConfigSecret.ConfigSecret
14
+ readonly debug: boolean
15
+ readonly rest: {
16
+ readonly baseUrl: string
17
+ readonly globalRateLimit: {
18
+ readonly limit: number
19
+ readonly window: Duration.DurationInput
11
20
  }
12
21
  }
13
- gateway: {
14
- intents: number
15
- presence?: Discord.UpdatePresence
16
- shardCount?: number
22
+ readonly gateway: {
23
+ readonly intents: number
24
+ readonly presence?: Discord.UpdatePresence
25
+ readonly shardCount?: number
17
26
 
18
- identifyRateLimit: readonly [window: number, limit: number]
27
+ readonly identifyRateLimit: readonly [window: number, limit: number]
19
28
  }
20
29
  }
21
30
  export const DiscordConfig = Tag<DiscordConfig>()
22
31
 
23
32
  export interface MakeOpts {
24
- token: ConfigSecret
25
- debug?: boolean
26
- rest?: Partial<DiscordConfig["rest"]>
27
- gateway?: Partial<DiscordConfig["gateway"]>
33
+ readonly token: ConfigSecret.ConfigSecret
34
+ readonly debug?: boolean
35
+ readonly rest?: Partial<DiscordConfig["rest"]>
36
+ readonly gateway?: Partial<DiscordConfig["gateway"]>
28
37
  }
29
38
 
30
39
  export const make = ({
@@ -51,7 +60,12 @@ export const make = ({
51
60
  },
52
61
  })
53
62
 
54
- export const makeLayer = (opts: MakeOpts) =>
63
+ export const makeLayer = (
64
+ opts: MakeOpts,
65
+ ): Layer.Layer<never, never, DiscordConfig> =>
55
66
  Layer.succeed(DiscordConfig, make(opts))
56
- export const makeFromConfig = (_: Config.Wrap<MakeOpts>) =>
57
- Layer.effect(DiscordConfig, Config.unwrap(_).config.map(make))
67
+
68
+ export const makeFromConfig = (
69
+ _: Config.Config.Wrap<MakeOpts>,
70
+ ): Layer.Layer<never, ConfigError.ConfigError, DiscordConfig> =>
71
+ Layer.effect(DiscordConfig, Effect.map(Effect.config(Config.unwrap(_)), make))