dfx 1.0.5 → 1.0.7

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 (194) hide show
  1. package/dist/Cache/driver.d.ts.map +1 -1
  2. package/dist/Cache/memory.d.ts.map +1 -1
  3. package/dist/Cache/memoryTTL.d.ts.map +1 -1
  4. package/dist/Cache/prelude.d.ts.map +1 -1
  5. package/dist/Cache.d.ts.map +1 -1
  6. package/dist/DiscordConfig.d.ts.map +1 -1
  7. package/dist/DiscordGateway/DiscordWS.d.ts.map +1 -1
  8. package/dist/DiscordGateway/Messaging.d.ts.map +1 -1
  9. package/dist/DiscordGateway/Shard/StateStore.d.ts.map +1 -1
  10. package/dist/DiscordGateway/Shard/heartbeats.d.ts.map +1 -1
  11. package/dist/DiscordGateway/Shard/identify.d.ts.map +1 -1
  12. package/dist/DiscordGateway/Shard/sendEvents.d.ts.map +1 -1
  13. package/dist/DiscordGateway/Shard/utils.d.ts.map +1 -1
  14. package/dist/DiscordGateway/Shard.d.ts.map +1 -1
  15. package/dist/DiscordGateway/ShardStore.d.ts.map +1 -1
  16. package/dist/DiscordGateway/Sharder.d.ts +1 -1
  17. package/dist/DiscordGateway/Sharder.d.ts.map +1 -1
  18. package/dist/DiscordGateway.d.ts.map +1 -1
  19. package/dist/DiscordREST/Generated.d.ts.map +1 -1
  20. package/dist/DiscordREST/utils.d.ts.map +1 -1
  21. package/dist/DiscordREST.d.ts.map +1 -1
  22. package/dist/Helpers/flags.d.ts.map +1 -1
  23. package/dist/Helpers/intents.d.ts.map +1 -1
  24. package/dist/Helpers/interactions.d.ts.map +1 -1
  25. package/dist/Helpers/members.d.ts.map +1 -1
  26. package/dist/Helpers/permissions.d.ts.map +1 -1
  27. package/dist/Helpers/ui.d.ts.map +1 -1
  28. package/dist/Interactions/builder.d.ts.map +1 -1
  29. package/dist/Interactions/commandHelper.d.ts.map +1 -1
  30. package/dist/Interactions/context.d.ts.map +1 -1
  31. package/dist/Interactions/definitions.d.ts.map +1 -1
  32. package/dist/Interactions/error.d.ts.map +1 -1
  33. package/dist/Interactions/gateway.d.ts.map +1 -1
  34. package/dist/Interactions/handlers.d.ts.map +1 -1
  35. package/dist/Interactions/index.d.ts.map +1 -1
  36. package/dist/Interactions/utils.d.ts.map +1 -1
  37. package/dist/Interactions/webhook.d.ts.map +1 -1
  38. package/dist/RateLimit/memory.d.ts.map +1 -1
  39. package/dist/RateLimit/utils.d.ts.map +1 -1
  40. package/dist/RateLimit.d.ts.map +1 -1
  41. package/dist/gateway.d.ts.map +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/types.d.ts.map +1 -1
  44. package/dist/utils/Effect.d.ts.map +1 -1
  45. package/dist/version.d.ts +1 -1
  46. package/dist/version.d.ts.map +1 -1
  47. package/dist/version.js +1 -1
  48. package/dist/webhooks.d.ts.map +1 -1
  49. package/package.json +5 -5
  50. package/src/version.ts +1 -1
  51. package/dist/LICENSE +0 -21
  52. package/dist/README.md +0 -66
  53. package/dist/mjs/Cache/driver.mjs +0 -3
  54. package/dist/mjs/Cache/driver.mjs.map +0 -1
  55. package/dist/mjs/Cache/memory.mjs +0 -48
  56. package/dist/mjs/Cache/memory.mjs.map +0 -1
  57. package/dist/mjs/Cache/memoryTTL.mjs +0 -119
  58. package/dist/mjs/Cache/memoryTTL.mjs.map +0 -1
  59. package/dist/mjs/Cache/prelude.mjs +0 -131
  60. package/dist/mjs/Cache/prelude.mjs.map +0 -1
  61. package/dist/mjs/Cache.mjs +0 -90
  62. package/dist/mjs/Cache.mjs.map +0 -1
  63. package/dist/mjs/DiscordConfig.mjs +0 -32
  64. package/dist/mjs/DiscordConfig.mjs.map +0 -1
  65. package/dist/mjs/DiscordGateway/DiscordWS.mjs +0 -77
  66. package/dist/mjs/DiscordGateway/DiscordWS.mjs.map +0 -1
  67. package/dist/mjs/DiscordGateway/Messaging.mjs +0 -35
  68. package/dist/mjs/DiscordGateway/Messaging.mjs.map +0 -1
  69. package/dist/mjs/DiscordGateway/Shard/StateStore.mjs +0 -41
  70. package/dist/mjs/DiscordGateway/Shard/StateStore.mjs.map +0 -1
  71. package/dist/mjs/DiscordGateway/Shard/heartbeats.mjs +0 -25
  72. package/dist/mjs/DiscordGateway/Shard/heartbeats.mjs.map +0 -1
  73. package/dist/mjs/DiscordGateway/Shard/identify.mjs +0 -29
  74. package/dist/mjs/DiscordGateway/Shard/identify.mjs.map +0 -1
  75. package/dist/mjs/DiscordGateway/Shard/sendEvents.mjs +0 -26
  76. package/dist/mjs/DiscordGateway/Shard/sendEvents.mjs.map +0 -1
  77. package/dist/mjs/DiscordGateway/Shard/utils.mjs +0 -3
  78. package/dist/mjs/DiscordGateway/Shard/utils.mjs.map +0 -1
  79. package/dist/mjs/DiscordGateway/Shard.mjs +0 -147
  80. package/dist/mjs/DiscordGateway/Shard.mjs.map +0 -1
  81. package/dist/mjs/DiscordGateway/ShardStore.mjs +0 -24
  82. package/dist/mjs/DiscordGateway/ShardStore.mjs.map +0 -1
  83. package/dist/mjs/DiscordGateway/Sharder.mjs +0 -67
  84. package/dist/mjs/DiscordGateway/Sharder.mjs.map +0 -1
  85. package/dist/mjs/DiscordGateway.mjs +0 -21
  86. package/dist/mjs/DiscordGateway.mjs.map +0 -1
  87. package/dist/mjs/DiscordREST/Generated.mjs +0 -2471
  88. package/dist/mjs/DiscordREST/Generated.mjs.map +0 -1
  89. package/dist/mjs/DiscordREST/utils.mjs +0 -21
  90. package/dist/mjs/DiscordREST/utils.mjs.map +0 -1
  91. package/dist/mjs/DiscordREST.mjs +0 -119
  92. package/dist/mjs/DiscordREST.mjs.map +0 -1
  93. package/dist/mjs/Helpers/flags.mjs +0 -45
  94. package/dist/mjs/Helpers/flags.mjs.map +0 -1
  95. package/dist/mjs/Helpers/intents.mjs +0 -27
  96. package/dist/mjs/Helpers/intents.mjs.map +0 -1
  97. package/dist/mjs/Helpers/interactions.mjs +0 -115
  98. package/dist/mjs/Helpers/interactions.mjs.map +0 -1
  99. package/dist/mjs/Helpers/members.mjs +0 -9
  100. package/dist/mjs/Helpers/members.mjs.map +0 -1
  101. package/dist/mjs/Helpers/permissions.mjs +0 -84
  102. package/dist/mjs/Helpers/permissions.mjs.map +0 -1
  103. package/dist/mjs/Helpers/ui.mjs +0 -137
  104. package/dist/mjs/Helpers/ui.mjs.map +0 -1
  105. package/dist/mjs/Interactions/builder.mjs +0 -56
  106. package/dist/mjs/Interactions/builder.mjs.map +0 -1
  107. package/dist/mjs/Interactions/commandHelper.mjs +0 -49
  108. package/dist/mjs/Interactions/commandHelper.mjs.map +0 -1
  109. package/dist/mjs/Interactions/context.mjs +0 -28
  110. package/dist/mjs/Interactions/context.mjs.map +0 -1
  111. package/dist/mjs/Interactions/definitions.mjs +0 -51
  112. package/dist/mjs/Interactions/definitions.mjs.map +0 -1
  113. package/dist/mjs/Interactions/error.mjs +0 -2
  114. package/dist/mjs/Interactions/error.mjs.map +0 -1
  115. package/dist/mjs/Interactions/gateway.mjs +0 -82
  116. package/dist/mjs/Interactions/gateway.mjs.map +0 -1
  117. package/dist/mjs/Interactions/handlers.mjs +0 -64
  118. package/dist/mjs/Interactions/handlers.mjs.map +0 -1
  119. package/dist/mjs/Interactions/index.mjs +0 -11
  120. package/dist/mjs/Interactions/index.mjs.map +0 -1
  121. package/dist/mjs/Interactions/utils.mjs +0 -26
  122. package/dist/mjs/Interactions/utils.mjs.map +0 -1
  123. package/dist/mjs/Interactions/webhook.mjs +0 -75
  124. package/dist/mjs/Interactions/webhook.mjs.map +0 -1
  125. package/dist/mjs/RateLimit/memory.mjs +0 -39
  126. package/dist/mjs/RateLimit/memory.mjs.map +0 -1
  127. package/dist/mjs/RateLimit/utils.mjs +0 -18
  128. package/dist/mjs/RateLimit/utils.mjs.map +0 -1
  129. package/dist/mjs/RateLimit.mjs +0 -28
  130. package/dist/mjs/RateLimit.mjs.map +0 -1
  131. package/dist/mjs/gateway.mjs +0 -19
  132. package/dist/mjs/gateway.mjs.map +0 -1
  133. package/dist/mjs/index.mjs +0 -18
  134. package/dist/mjs/index.mjs.map +0 -1
  135. package/dist/mjs/types.mjs +0 -356
  136. package/dist/mjs/types.mjs.map +0 -1
  137. package/dist/mjs/utils/Effect.mjs +0 -44
  138. package/dist/mjs/utils/Effect.mjs.map +0 -1
  139. package/dist/mjs/version.mjs +0 -2
  140. package/dist/mjs/version.mjs.map +0 -1
  141. package/dist/mjs/webhooks.mjs +0 -6
  142. package/dist/mjs/webhooks.mjs.map +0 -1
  143. package/dist/package.json +0 -48
  144. package/dist/src/Cache/driver.ts +0 -37
  145. package/dist/src/Cache/memory.ts +0 -83
  146. package/dist/src/Cache/memoryTTL.ts +0 -225
  147. package/dist/src/Cache/prelude.ts +0 -279
  148. package/dist/src/Cache.ts +0 -261
  149. package/dist/src/DiscordConfig.ts +0 -67
  150. package/dist/src/DiscordGateway/DiscordWS.ts +0 -157
  151. package/dist/src/DiscordGateway/Messaging.ts +0 -71
  152. package/dist/src/DiscordGateway/Shard/StateStore.ts +0 -72
  153. package/dist/src/DiscordGateway/Shard/heartbeats.ts +0 -60
  154. package/dist/src/DiscordGateway/Shard/identify.ts +0 -50
  155. package/dist/src/DiscordGateway/Shard/sendEvents.ts +0 -43
  156. package/dist/src/DiscordGateway/Shard/utils.ts +0 -13
  157. package/dist/src/DiscordGateway/Shard.ts +0 -205
  158. package/dist/src/DiscordGateway/ShardStore.ts +0 -42
  159. package/dist/src/DiscordGateway/Sharder.ts +0 -118
  160. package/dist/src/DiscordGateway.ts +0 -79
  161. package/dist/src/DiscordREST/Generated.ts +0 -10832
  162. package/dist/src/DiscordREST/utils.ts +0 -42
  163. package/dist/src/DiscordREST.ts +0 -256
  164. package/dist/src/Helpers/flags.ts +0 -73
  165. package/dist/src/Helpers/intents.ts +0 -35
  166. package/dist/src/Helpers/interactions.ts +0 -317
  167. package/dist/src/Helpers/members.ts +0 -18
  168. package/dist/src/Helpers/permissions.ts +0 -145
  169. package/dist/src/Helpers/ui.ts +0 -253
  170. package/dist/src/Interactions/builder.ts +0 -171
  171. package/dist/src/Interactions/commandHelper.ts +0 -231
  172. package/dist/src/Interactions/context.ts +0 -104
  173. package/dist/src/Interactions/definitions.ts +0 -144
  174. package/dist/src/Interactions/error.ts +0 -3
  175. package/dist/src/Interactions/gateway.ts +0 -193
  176. package/dist/src/Interactions/handlers.ts +0 -108
  177. package/dist/src/Interactions/index.ts +0 -30
  178. package/dist/src/Interactions/utils.ts +0 -93
  179. package/dist/src/Interactions/webhook.ts +0 -204
  180. package/dist/src/RateLimit/memory.ts +0 -63
  181. package/dist/src/RateLimit/utils.ts +0 -28
  182. package/dist/src/RateLimit.ts +0 -90
  183. package/dist/src/gateway.ts +0 -50
  184. package/dist/src/index.ts +0 -44
  185. package/dist/src/types.ts +0 -3090
  186. package/dist/src/utils/Effect.ts +0 -65
  187. package/dist/src/version.ts +0 -1
  188. package/dist/src/webhooks.ts +0 -25
  189. package/dist/tsconfig.base.json +0 -54
  190. package/dist/tsconfig.build.json +0 -10
  191. package/dist/tsconfig.examples.json +0 -10
  192. package/dist/tsconfig.json +0 -14
  193. package/dist/tsconfig.madge.json +0 -12
  194. package/dist/tsconfig.test.json +0 -10
@@ -1,225 +0,0 @@
1
- import type { CacheDriver, ParentCacheDriver } from "./driver.ts"
2
- import { createDriver, createParentDriver } from "./driver.ts"
3
- import * as Array from "effect/Array"
4
- import * as Duration from "effect/Duration"
5
- import * as Effect from "effect/Effect"
6
- import * as Option from "effect/Option"
7
-
8
- declare const global: typeof globalThis & {
9
- gc?: () => void
10
- }
11
-
12
- export interface MemoryTTLOpts {
13
- /** The approx. number of milliseconds to keep items */
14
- readonly ttl: Duration.Duration
15
-
16
- /**
17
- * How often items should be cleared.
18
- */
19
- readonly resolution?: Duration.Duration
20
-
21
- /**
22
- * What sweep strategy to use.
23
- *
24
- * "activity" means the TTL is reset for every `set` OR `get` operation
25
- * "usage" means the TTL is only reset for the `get` operation
26
- *
27
- * Defaults to "usage"
28
- */
29
- readonly strategy?: "activity" | "usage" | "expiry"
30
- }
31
-
32
- interface CacheItem<T> {
33
- resource: T
34
- }
35
-
36
- interface TTLBucket<T> {
37
- readonly expires: number
38
- readonly items: Array<CacheItem<T>>
39
- }
40
-
41
- const make = <T>({
42
- resolution = Duration.minutes(1),
43
- strategy = "usage",
44
- ttl,
45
- }: MemoryTTLOpts): CacheDriver<never, T> => {
46
- const resolutionMs = Duration.toMillis(resolution)
47
- const additionalMilliseconds =
48
- (Math.floor(Duration.toMillis(ttl) / resolutionMs) + 1) * resolutionMs
49
-
50
- const items = new Map<string, WeakRef<CacheItem<T>>>()
51
- const buckets: Array<TTLBucket<T>> = []
52
-
53
- const refreshTTL = (item: CacheItem<T>) => {
54
- const now = Date.now()
55
- const remainder = now % resolutionMs
56
- const expires = now - remainder + additionalMilliseconds
57
- let currentBucket = buckets[buckets.length - 1]
58
-
59
- if ((currentBucket?.expires || 0) < expires) {
60
- currentBucket = {
61
- expires,
62
- items: [],
63
- }
64
- buckets.push(currentBucket)
65
- }
66
-
67
- currentBucket.items.push(item)
68
- }
69
-
70
- const sweep = () => {
71
- const now = Date.now()
72
- const remainder = now % resolutionMs
73
- const currentExpires = now - remainder
74
-
75
- while (buckets.length && buckets[0].expires <= currentExpires) {
76
- buckets.shift()!
77
- }
78
-
79
- if (global.gc) {
80
- global.gc()
81
- }
82
- }
83
-
84
- const getSync = (resourceId: string) => {
85
- const ref = items.get(resourceId)
86
- if (!ref) return undefined
87
-
88
- const item = ref.deref()
89
- if (!item) {
90
- items.delete(resourceId)
91
- return undefined
92
- }
93
-
94
- if (strategy !== "expiry") {
95
- refreshTTL(item)
96
- }
97
-
98
- return item.resource
99
- }
100
-
101
- return createDriver({
102
- size: Effect.sync(() => items.size),
103
-
104
- get: resourceId =>
105
- Effect.sync(
106
- (): Option.Option<T> => Option.fromNullishOr(getSync(resourceId)),
107
- ),
108
-
109
- refreshTTL: id =>
110
- Effect.sync(() => {
111
- getSync(id)
112
- }),
113
-
114
- set: (resourceId, resource) =>
115
- Effect.sync(() => {
116
- const item = items.get(resourceId)?.deref()
117
-
118
- if (item && strategy !== "activity") {
119
- item.resource = resource
120
- } else {
121
- const newItem = { resource }
122
- refreshTTL(newItem)
123
- items.set(resourceId, new WeakRef(newItem))
124
- }
125
- }),
126
-
127
- delete: resourceId =>
128
- Effect.sync(() => {
129
- items.delete(resourceId)
130
- }),
131
-
132
- run: Effect.sync(sweep).pipe(
133
- Effect.delay(Duration.times(resolution, 0.5)),
134
- Effect.forever,
135
- ),
136
- })
137
- }
138
-
139
- export const create = <T>(
140
- opts: MemoryTTLOpts,
141
- ): Effect.Effect<CacheDriver<never, T>> => Effect.sync(() => make<T>(opts))
142
-
143
- export const createWithParent = <T>(
144
- opts: MemoryTTLOpts,
145
- ): Effect.Effect<ParentCacheDriver<never, T>> =>
146
- Effect.sync(() => {
147
- const store = make<T>(opts)
148
- const parentIds = new Map<string, Set<string>>()
149
-
150
- return createParentDriver({
151
- size: store.size,
152
- sizeForParent: parentId =>
153
- Effect.sync(() => parentIds.get(parentId)?.size ?? 0),
154
-
155
- refreshTTL: (_, id) => store.refreshTTL(id),
156
-
157
- get: (_, id) => store.get(id),
158
-
159
- getForParent: parentId =>
160
- Effect.fromNullishOr(parentIds.get(parentId)).pipe(
161
- Effect.flatMap(ids =>
162
- Effect.forEach(
163
- ids,
164
- id =>
165
- store.get(id).pipe(
166
- Effect.tap(item =>
167
- Effect.sync(() => {
168
- if (item._tag === "None") {
169
- ids.delete(id)
170
- }
171
- }),
172
- ),
173
- Effect.map(item => [id, item] as const),
174
- ),
175
- { concurrency: "unbounded" },
176
- ),
177
- ),
178
- Effect.map(
179
- Array.reduce(new Map<string, T>(), (acc, [id, item]) =>
180
- item._tag === "Some" ? acc.set(id, item.value) : acc,
181
- ),
182
- ),
183
- Effect.catchNoSuchElement,
184
- ),
185
-
186
- set: (parentId, resourceId, resource) =>
187
- Effect.andThen(
188
- store.set(resourceId, resource),
189
- Effect.sync(() => {
190
- if (!parentIds.has(parentId)) {
191
- parentIds.set(parentId, new Set())
192
- }
193
- parentIds.get(parentId)!.add(resourceId)
194
- }),
195
- ),
196
-
197
- delete: (parentId, resourceId) =>
198
- Effect.andThen(
199
- store.delete(resourceId),
200
- Effect.sync(() => {
201
- parentIds.get(parentId)?.delete(resourceId)
202
- }),
203
- ),
204
-
205
- parentDelete: parentId =>
206
- Effect.suspend(() => {
207
- const ids = parentIds.get(parentId)
208
- parentIds.delete(parentId)
209
-
210
- const effects: Array<Effect.Effect<void>> = []
211
- if (ids) {
212
- ids.forEach(id => {
213
- effects.push(store.delete(id))
214
- })
215
- }
216
-
217
- return Effect.all(effects, {
218
- concurrency: "unbounded",
219
- discard: true,
220
- })
221
- }),
222
-
223
- run: store.run,
224
- })
225
- })
@@ -1,279 +0,0 @@
1
- import * as Effect from "effect/Effect"
2
- import type * as Scope from "effect/Scope"
3
- import * as Stream from "effect/Stream"
4
- import type { DiscordRESTError } from "../DiscordREST.ts"
5
- import { DiscordREST } from "../DiscordREST.ts"
6
- import type {
7
- CacheDriver,
8
- CacheOp,
9
- ParentCacheDriver,
10
- ParentCacheOp,
11
- Cache,
12
- ParentCache,
13
- } from "../Cache.ts"
14
- import { CacheMissError, make, makeWithParent } from "../Cache.ts"
15
- import { DiscordGateway } from "../DiscordGateway.ts"
16
- import type * as Discord from "../types.ts"
17
-
18
- export interface OptsWithParentOptions<E, A> {
19
- readonly id: (a: A) => string
20
- readonly fromParent: Stream.Stream<
21
- [parentId: string, resources: ReadonlyArray<A>],
22
- E
23
- >
24
- readonly create: Stream.Stream<[parentId: string, resource: A], E>
25
- readonly update: Stream.Stream<[parentId: string, resource: A], E>
26
- readonly remove: Stream.Stream<[parentId: string, id: string], E>
27
- readonly parentRemove: Stream.Stream<string, E>
28
- }
29
-
30
- export const opsWithParent = <E, T>({
31
- create,
32
- fromParent,
33
- id,
34
- parentRemove,
35
- remove,
36
- update,
37
- }: OptsWithParentOptions<E, T>): Stream.Stream<ParentCacheOp<T>, E> => {
38
- const fromParentOps = Stream.flatMap(fromParent, ([parentId, a]) =>
39
- Stream.fromIterable(
40
- a.map(
41
- (resource): ParentCacheOp<T> => ({
42
- op: "create",
43
- parentId,
44
- resourceId: id(resource),
45
- resource,
46
- }),
47
- ),
48
- ),
49
- )
50
-
51
- const createOps = Stream.map(
52
- create,
53
- ([parentId, resource]): ParentCacheOp<T> => ({
54
- op: "create",
55
- parentId,
56
- resourceId: id(resource),
57
- resource,
58
- }),
59
- )
60
-
61
- const updateOps = Stream.map(
62
- update,
63
- ([parentId, resource]): ParentCacheOp<T> => ({
64
- op: "update",
65
- parentId,
66
- resourceId: id(resource),
67
- resource,
68
- }),
69
- )
70
-
71
- const removeOps = Stream.map(
72
- remove,
73
- ([parentId, resourceId]): ParentCacheOp<T> => ({
74
- op: "delete",
75
- parentId,
76
- resourceId,
77
- }),
78
- )
79
-
80
- const parentRemoveOps = Stream.map(
81
- parentRemove,
82
- (parentId): ParentCacheOp<T> => ({
83
- op: "parentDelete",
84
- parentId,
85
- }),
86
- )
87
-
88
- return Stream.merge(fromParentOps, createOps).pipe(
89
- Stream.merge(updateOps),
90
- Stream.merge(removeOps),
91
- Stream.merge(parentRemoveOps),
92
- )
93
- }
94
-
95
- export interface OpsOptions<E, A> {
96
- id: (a: A) => string
97
- create: Stream.Stream<A, E>
98
- update: Stream.Stream<A, E>
99
- remove: Stream.Stream<string, E>
100
- }
101
-
102
- export const ops = <E, T>({
103
- create,
104
- id,
105
- remove,
106
- update,
107
- }: OpsOptions<E, T>): Stream.Stream<CacheOp<T>, E> => {
108
- const createOps = Stream.map(
109
- create,
110
- (resource): CacheOp<T> => ({
111
- op: "create",
112
- resourceId: id(resource),
113
- resource,
114
- }),
115
- )
116
-
117
- const updateOps = Stream.map(
118
- update,
119
- (resource): CacheOp<T> => ({
120
- op: "update",
121
- resourceId: id(resource),
122
- resource,
123
- }),
124
- )
125
-
126
- const removeOps = Stream.map(
127
- remove,
128
- (resourceId): CacheOp<T> => ({
129
- op: "delete",
130
- resourceId,
131
- }),
132
- )
133
-
134
- return Stream.merge(createOps, updateOps).pipe(Stream.merge(removeOps))
135
- }
136
-
137
- export const guilds = <RM, EM, E>(
138
- makeDriver: Effect.Effect<CacheDriver<E, Discord.GuildResponse>, EM, RM>,
139
- ): Effect.Effect<
140
- Cache<E, DiscordRESTError, Discord.GuildResponse>,
141
- EM,
142
- RM | DiscordGateway | DiscordREST | Scope.Scope
143
- > =>
144
- Effect.gen(function* () {
145
- const driver = yield* makeDriver
146
- const gateway = yield* DiscordGateway
147
- const rest = yield* DiscordREST
148
-
149
- return yield* make({
150
- driver,
151
- id: _ => _.id,
152
- ops: ops({
153
- id: (g: Discord.GuildResponse) => g.id,
154
- create: Stream.map(gateway.fromDispatch("GUILD_CREATE"), g => ({
155
- ...g,
156
- channels: [],
157
- roles: [],
158
- emojis: [],
159
- members: [],
160
- })),
161
- update: gateway.fromDispatch("GUILD_UPDATE"),
162
- remove: Stream.map(gateway.fromDispatch("GUILD_DELETE"), a => a.id),
163
- }),
164
- onMiss: id => rest.getGuild(id, {}),
165
- })
166
- })
167
-
168
- export const channels = <RM, EM, E>(
169
- makeDriver: Effect.Effect<
170
- ParentCacheDriver<E, Discord.GetChannel200>,
171
- EM,
172
- RM
173
- >,
174
- ): Effect.Effect<
175
- ParentCache<E, DiscordRESTError, DiscordRESTError, Discord.GetChannel200>,
176
- EM,
177
- DiscordGateway | DiscordREST | RM | Scope.Scope
178
- > =>
179
- Effect.gen(function* () {
180
- const driver = yield* makeDriver
181
- const gateway = yield* DiscordGateway
182
- const rest = yield* DiscordREST
183
-
184
- return yield* makeWithParent({
185
- driver,
186
- id: _ =>
187
- Effect.succeed([(_ as Discord.GuildChannelResponse).guild_id, _.id]),
188
- ops: opsWithParent({
189
- id: (a: Discord.GetChannel200) => a.id,
190
- fromParent: Stream.map(gateway.fromDispatch("GUILD_CREATE"), g => [
191
- g.id,
192
- g.channels.concat(g.threads as any),
193
- ]),
194
- create: Stream.merge(
195
- gateway.fromDispatch("CHANNEL_CREATE"),
196
- gateway.fromDispatch("THREAD_CREATE"),
197
- ).pipe(Stream.map(c => [c.guild_id, c])),
198
- update: Stream.merge(
199
- gateway.fromDispatch("CHANNEL_UPDATE"),
200
- gateway.fromDispatch("THREAD_UPDATE"),
201
- ).pipe(Stream.map(c => [c.guild_id, c])),
202
- remove: Stream.merge(
203
- gateway.fromDispatch("CHANNEL_DELETE"),
204
- gateway.fromDispatch("THREAD_DELETE"),
205
- ).pipe(Stream.map(a => [a.guild_id, a.id])),
206
- parentRemove: Stream.map(
207
- gateway.fromDispatch("GUILD_DELETE"),
208
- g => g.id,
209
- ),
210
- }),
211
- onMiss: (_, id) => rest.getChannel(id),
212
- onParentMiss: guildId =>
213
- Effect.map(rest.listGuildChannels(guildId), guildChannels =>
214
- guildChannels.map(
215
- channel => [channel.id, channel as Discord.GetChannel200] as const,
216
- ),
217
- ),
218
- })
219
- })
220
-
221
- export const roles = <RM, EM, E>(
222
- makeDriver: Effect.Effect<
223
- ParentCacheDriver<E, Discord.GuildRoleResponse>,
224
- EM,
225
- RM
226
- >,
227
- ): Effect.Effect<
228
- ParentCache<E, CacheMissError, DiscordRESTError, Discord.GuildRoleResponse>,
229
- EM,
230
- DiscordGateway | DiscordREST | RM | Scope.Scope
231
- > =>
232
- Effect.gen(function* () {
233
- const driver = yield* makeDriver
234
- const gateway = yield* DiscordGateway
235
- const rest = yield* DiscordREST
236
-
237
- return yield* makeWithParent({
238
- driver,
239
- id: _ =>
240
- Effect.fail(
241
- new CacheMissError({ cacheName: "RolesCache/id", id: _.id }),
242
- ),
243
- ops: opsWithParent({
244
- id: (a: Discord.GuildRoleResponse) => a.id,
245
- fromParent: Stream.map(gateway.fromDispatch("GUILD_CREATE"), g => [
246
- g.id,
247
- g.roles,
248
- ]),
249
- create: Stream.map(
250
- gateway.fromDispatch("GUILD_ROLE_CREATE"),
251
- (r: Discord.GatewayGuildRoleCreateDispatchData) => [
252
- r.guild_id,
253
- r.role,
254
- ],
255
- ),
256
- update: Stream.map(
257
- gateway.fromDispatch("GUILD_ROLE_UPDATE"),
258
- (r: Discord.GatewayGuildRoleUpdateDispatchData) => [
259
- r.guild_id,
260
- r.role,
261
- ],
262
- ),
263
- remove: Stream.map(gateway.fromDispatch("GUILD_ROLE_DELETE"), r => [
264
- r.guild_id,
265
- r.role_id,
266
- ]),
267
- parentRemove: Stream.map(
268
- gateway.fromDispatch("GUILD_DELETE"),
269
- g => g.id,
270
- ),
271
- }),
272
- onMiss: (_, id) =>
273
- Effect.fail(new CacheMissError({ cacheName: "RolesCache", id })),
274
- onParentMiss: guildId =>
275
- rest
276
- .listGuildRoles(guildId)
277
- .pipe(Effect.map(_ => _.map(role => [role.id, role]))),
278
- })
279
- })