dfx 1.0.1 → 1.0.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.
- package/.babel.cjs.json +11 -0
- package/.babel.mjs.json +10 -0
- package/.envrc +1 -0
- package/.gitmodules +3 -0
- package/.husky/pre-commit +2 -0
- package/.oxlintrc.json +72 -0
- package/.prettierignore +0 -0
- package/.prettierrc.json +5 -0
- package/.tool-versions +1 -0
- package/.vscode/debug.cjs +8 -0
- package/.vscode/launch.json +23 -0
- package/.vscode/settings.json +29 -0
- package/.vscode/tasks.json +44 -0
- package/AGENTS.md +15 -0
- package/CHANGELOG.md +1562 -0
- package/examples/.env.example +5 -0
- package/examples/interactions.ts +79 -0
- package/examples/readme.ts +56 -0
- package/examples/registry.ts +66 -0
- package/flake.lock +27 -0
- package/flake.nix +21 -0
- package/lerna.json +12 -0
- package/package.json +79 -35
- package/pnpm-workspace.yaml +7 -0
- package/scripts/generate-client.sh +10 -0
- package/scripts/worktree-setup.sh +8 -0
- package/test/index.test.ts +5 -0
- package/vitest.config.ts +22 -0
- package/Cache/driver.d.ts +0 -24
- package/Cache/driver.d.ts.map +0 -1
- package/Cache/driver.js +0 -11
- package/Cache/driver.js.map +0 -1
- package/Cache/memory.d.ts +0 -5
- package/Cache/memory.d.ts.map +0 -1
- package/Cache/memory.js +0 -57
- package/Cache/memory.js.map +0 -1
- package/Cache/memoryTTL.d.ts +0 -23
- package/Cache/memoryTTL.d.ts.map +0 -1
- package/Cache/memoryTTL.js +0 -128
- package/Cache/memoryTTL.js.map +0 -1
- package/Cache/prelude.d.ts +0 -32
- package/Cache/prelude.d.ts.map +0 -1
- package/Cache/prelude.js +0 -143
- package/Cache/prelude.js.map +0 -1
- package/Cache.d.ts +0 -81
- package/Cache.d.ts.map +0 -1
- package/Cache.js +0 -145
- package/Cache.js.map +0 -1
- package/DiscordConfig.d.ts +0 -35
- package/DiscordConfig.d.ts.map +0 -1
- package/DiscordConfig.js +0 -43
- package/DiscordConfig.js.map +0 -1
- package/DiscordGateway/DiscordWS.d.ts +0 -37
- package/DiscordGateway/DiscordWS.d.ts.map +0 -1
- package/DiscordGateway/DiscordWS.js +0 -86
- package/DiscordGateway/DiscordWS.js.map +0 -1
- package/DiscordGateway/Messaging.d.ts +0 -587
- package/DiscordGateway/Messaging.d.ts.map +0 -1
- package/DiscordGateway/Messaging.js +0 -43
- package/DiscordGateway/Messaging.js.map +0 -1
- package/DiscordGateway/Shard/StateStore.d.ts +0 -24
- package/DiscordGateway/Shard/StateStore.d.ts.map +0 -1
- package/DiscordGateway/Shard/StateStore.js +0 -49
- package/DiscordGateway/Shard/StateStore.js.map +0 -1
- package/DiscordGateway/Shard/heartbeats.d.ts +0 -8
- package/DiscordGateway/Shard/heartbeats.d.ts.map +0 -1
- package/DiscordGateway/Shard/heartbeats.js +0 -33
- package/DiscordGateway/Shard/heartbeats.js.map +0 -1
- package/DiscordGateway/Shard/identify.d.ts +0 -12
- package/DiscordGateway/Shard/identify.d.ts.map +0 -1
- package/DiscordGateway/Shard/identify.js +0 -37
- package/DiscordGateway/Shard/identify.js.map +0 -1
- package/DiscordGateway/Shard/sendEvents.d.ts +0 -8
- package/DiscordGateway/Shard/sendEvents.d.ts.map +0 -1
- package/DiscordGateway/Shard/sendEvents.js +0 -39
- package/DiscordGateway/Shard/sendEvents.js.map +0 -1
- package/DiscordGateway/Shard/utils.d.ts +0 -6
- package/DiscordGateway/Shard/utils.d.ts.map +0 -1
- package/DiscordGateway/Shard/utils.js +0 -11
- package/DiscordGateway/Shard/utils.js.map +0 -1
- package/DiscordGateway/Shard.d.ts +0 -29
- package/DiscordGateway/Shard.d.ts.map +0 -1
- package/DiscordGateway/Shard.js +0 -155
- package/DiscordGateway/Shard.js.map +0 -1
- package/DiscordGateway/ShardStore.d.ts +0 -19
- package/DiscordGateway/ShardStore.d.ts.map +0 -1
- package/DiscordGateway/ShardStore.js +0 -32
- package/DiscordGateway/ShardStore.js.map +0 -1
- package/DiscordGateway/Sharder.d.ts +0 -14
- package/DiscordGateway/Sharder.d.ts.map +0 -1
- package/DiscordGateway/Sharder.js +0 -75
- package/DiscordGateway/Sharder.js.map +0 -1
- package/DiscordGateway.d.ts +0 -33
- package/DiscordGateway.d.ts.map +0 -1
- package/DiscordGateway.js +0 -28
- package/DiscordGateway.js.map +0 -1
- package/DiscordREST/Generated.d.ts +0 -5577
- package/DiscordREST/Generated.d.ts.map +0 -1
- package/DiscordREST/Generated.js +0 -2480
- package/DiscordREST/Generated.js.map +0 -1
- package/DiscordREST/utils.d.ts +0 -14
- package/DiscordREST/utils.d.ts.map +0 -1
- package/DiscordREST/utils.js +0 -32
- package/DiscordREST/utils.js.map +0 -1
- package/DiscordREST.d.ts +0 -22
- package/DiscordREST.d.ts.map +0 -1
- package/DiscordREST.js +0 -128
- package/DiscordREST.js.map +0 -1
- package/Helpers/flags.d.ts +0 -28
- package/Helpers/flags.d.ts.map +0 -1
- package/Helpers/flags.js +0 -57
- package/Helpers/flags.js.map +0 -1
- package/Helpers/intents.d.ts +0 -25
- package/Helpers/intents.d.ts.map +0 -1
- package/Helpers/intents.js +0 -34
- package/Helpers/intents.js.map +0 -1
- package/Helpers/interactions.d.ts +0 -116
- package/Helpers/interactions.d.ts.map +0 -1
- package/Helpers/interactions.js +0 -143
- package/Helpers/interactions.js.map +0 -1
- package/Helpers/members.d.ts +0 -10
- package/Helpers/members.d.ts.map +0 -1
- package/Helpers/members.js +0 -17
- package/Helpers/members.js.map +0 -1
- package/Helpers/permissions.d.ts +0 -42
- package/Helpers/permissions.d.ts.map +0 -1
- package/Helpers/permissions.js +0 -97
- package/Helpers/permissions.js.map +0 -1
- package/Helpers/ui.d.ts +0 -105
- package/Helpers/ui.d.ts.map +0 -1
- package/Helpers/ui.js +0 -162
- package/Helpers/ui.js.map +0 -1
- package/Interactions/builder.d.ts +0 -48
- package/Interactions/builder.d.ts.map +0 -1
- package/Interactions/builder.js +0 -64
- package/Interactions/builder.js.map +0 -1
- package/Interactions/commandHelper.d.ts +0 -83
- package/Interactions/commandHelper.d.ts.map +0 -1
- package/Interactions/commandHelper.js +0 -57
- package/Interactions/commandHelper.js.map +0 -1
- package/Interactions/context.d.ts +0 -53
- package/Interactions/context.d.ts.map +0 -1
- package/Interactions/context.js +0 -47
- package/Interactions/context.js.map +0 -1
- package/Interactions/definitions.d.ts +0 -43
- package/Interactions/definitions.d.ts.map +0 -1
- package/Interactions/definitions.js +0 -67
- package/Interactions/definitions.js.map +0 -1
- package/Interactions/error.d.ts +0 -2
- package/Interactions/error.d.ts.map +0 -1
- package/Interactions/error.js +0 -8
- package/Interactions/error.js.map +0 -1
- package/Interactions/gateway.d.ts +0 -20
- package/Interactions/gateway.d.ts.map +0 -1
- package/Interactions/gateway.js +0 -92
- package/Interactions/gateway.js.map +0 -1
- package/Interactions/handlers.d.ts +0 -15
- package/Interactions/handlers.d.ts.map +0 -1
- package/Interactions/handlers.js +0 -73
- package/Interactions/handlers.js.map +0 -1
- package/Interactions/index.d.ts +0 -17
- package/Interactions/index.d.ts.map +0 -1
- package/Interactions/index.js +0 -94
- package/Interactions/index.js.map +0 -1
- package/Interactions/utils.d.ts +0 -61
- package/Interactions/utils.d.ts.map +0 -1
- package/Interactions/utils.js +0 -35
- package/Interactions/utils.js.map +0 -1
- package/Interactions/webhook.d.ts +0 -71
- package/Interactions/webhook.d.ts.map +0 -1
- package/Interactions/webhook.js +0 -89
- package/Interactions/webhook.js.map +0 -1
- package/RateLimit/memory.d.ts +0 -3
- package/RateLimit/memory.d.ts.map +0 -1
- package/RateLimit/memory.js +0 -47
- package/RateLimit/memory.js.map +0 -1
- package/RateLimit/utils.d.ts +0 -3
- package/RateLimit/utils.d.ts.map +0 -1
- package/RateLimit/utils.js +0 -25
- package/RateLimit/utils.js.map +0 -1
- package/RateLimit.d.ts +0 -30
- package/RateLimit.d.ts.map +0 -1
- package/RateLimit.js +0 -37
- package/RateLimit.js.map +0 -1
- package/gateway.d.ts +0 -19
- package/gateway.d.ts.map +0 -1
- package/gateway.js +0 -72
- package/gateway.js.map +0 -1
- package/index.d.ts +0 -18
- package/index.d.ts.map +0 -1
- package/index.js +0 -71
- package/index.js.map +0 -1
- package/mjs/Cache/driver.mjs +0 -3
- package/mjs/Cache/driver.mjs.map +0 -1
- package/mjs/Cache/memory.mjs +0 -48
- package/mjs/Cache/memory.mjs.map +0 -1
- package/mjs/Cache/memoryTTL.mjs +0 -119
- package/mjs/Cache/memoryTTL.mjs.map +0 -1
- package/mjs/Cache/prelude.mjs +0 -131
- package/mjs/Cache/prelude.mjs.map +0 -1
- package/mjs/Cache.mjs +0 -90
- package/mjs/Cache.mjs.map +0 -1
- package/mjs/DiscordConfig.mjs +0 -32
- package/mjs/DiscordConfig.mjs.map +0 -1
- package/mjs/DiscordGateway/DiscordWS.mjs +0 -77
- package/mjs/DiscordGateway/DiscordWS.mjs.map +0 -1
- package/mjs/DiscordGateway/Messaging.mjs +0 -35
- package/mjs/DiscordGateway/Messaging.mjs.map +0 -1
- package/mjs/DiscordGateway/Shard/StateStore.mjs +0 -41
- package/mjs/DiscordGateway/Shard/StateStore.mjs.map +0 -1
- package/mjs/DiscordGateway/Shard/heartbeats.mjs +0 -25
- package/mjs/DiscordGateway/Shard/heartbeats.mjs.map +0 -1
- package/mjs/DiscordGateway/Shard/identify.mjs +0 -29
- package/mjs/DiscordGateway/Shard/identify.mjs.map +0 -1
- package/mjs/DiscordGateway/Shard/sendEvents.mjs +0 -26
- package/mjs/DiscordGateway/Shard/sendEvents.mjs.map +0 -1
- package/mjs/DiscordGateway/Shard/utils.mjs +0 -3
- package/mjs/DiscordGateway/Shard/utils.mjs.map +0 -1
- package/mjs/DiscordGateway/Shard.mjs +0 -147
- package/mjs/DiscordGateway/Shard.mjs.map +0 -1
- package/mjs/DiscordGateway/ShardStore.mjs +0 -24
- package/mjs/DiscordGateway/ShardStore.mjs.map +0 -1
- package/mjs/DiscordGateway/Sharder.mjs +0 -67
- package/mjs/DiscordGateway/Sharder.mjs.map +0 -1
- package/mjs/DiscordGateway.mjs +0 -21
- package/mjs/DiscordGateway.mjs.map +0 -1
- package/mjs/DiscordREST/Generated.mjs +0 -2471
- package/mjs/DiscordREST/Generated.mjs.map +0 -1
- package/mjs/DiscordREST/utils.mjs +0 -21
- package/mjs/DiscordREST/utils.mjs.map +0 -1
- package/mjs/DiscordREST.mjs +0 -119
- package/mjs/DiscordREST.mjs.map +0 -1
- package/mjs/Helpers/flags.mjs +0 -45
- package/mjs/Helpers/flags.mjs.map +0 -1
- package/mjs/Helpers/intents.mjs +0 -27
- package/mjs/Helpers/intents.mjs.map +0 -1
- package/mjs/Helpers/interactions.mjs +0 -115
- package/mjs/Helpers/interactions.mjs.map +0 -1
- package/mjs/Helpers/members.mjs +0 -9
- package/mjs/Helpers/members.mjs.map +0 -1
- package/mjs/Helpers/permissions.mjs +0 -84
- package/mjs/Helpers/permissions.mjs.map +0 -1
- package/mjs/Helpers/ui.mjs +0 -137
- package/mjs/Helpers/ui.mjs.map +0 -1
- package/mjs/Interactions/builder.mjs +0 -56
- package/mjs/Interactions/builder.mjs.map +0 -1
- package/mjs/Interactions/commandHelper.mjs +0 -49
- package/mjs/Interactions/commandHelper.mjs.map +0 -1
- package/mjs/Interactions/context.mjs +0 -28
- package/mjs/Interactions/context.mjs.map +0 -1
- package/mjs/Interactions/definitions.mjs +0 -51
- package/mjs/Interactions/definitions.mjs.map +0 -1
- package/mjs/Interactions/error.mjs +0 -2
- package/mjs/Interactions/error.mjs.map +0 -1
- package/mjs/Interactions/gateway.mjs +0 -82
- package/mjs/Interactions/gateway.mjs.map +0 -1
- package/mjs/Interactions/handlers.mjs +0 -64
- package/mjs/Interactions/handlers.mjs.map +0 -1
- package/mjs/Interactions/index.mjs +0 -11
- package/mjs/Interactions/index.mjs.map +0 -1
- package/mjs/Interactions/utils.mjs +0 -26
- package/mjs/Interactions/utils.mjs.map +0 -1
- package/mjs/Interactions/webhook.mjs +0 -75
- package/mjs/Interactions/webhook.mjs.map +0 -1
- package/mjs/RateLimit/memory.mjs +0 -39
- package/mjs/RateLimit/memory.mjs.map +0 -1
- package/mjs/RateLimit/utils.mjs +0 -18
- package/mjs/RateLimit/utils.mjs.map +0 -1
- package/mjs/RateLimit.mjs +0 -28
- package/mjs/RateLimit.mjs.map +0 -1
- package/mjs/gateway.mjs +0 -19
- package/mjs/gateway.mjs.map +0 -1
- package/mjs/index.mjs +0 -18
- package/mjs/index.mjs.map +0 -1
- package/mjs/types.mjs +0 -356
- package/mjs/types.mjs.map +0 -1
- package/mjs/utils/Effect.mjs +0 -44
- package/mjs/utils/Effect.mjs.map +0 -1
- package/mjs/version.mjs +0 -2
- package/mjs/version.mjs.map +0 -1
- package/mjs/webhooks.mjs +0 -6
- package/mjs/webhooks.mjs.map +0 -1
- package/src/version.ts +0 -1
- package/types.d.ts +0 -2458
- package/types.d.ts.map +0 -1
- package/types.js +0 -408
- package/types.js.map +0 -1
- package/utils/Effect.d.ts +0 -5
- package/utils/Effect.d.ts.map +0 -1
- package/utils/Effect.js +0 -53
- package/utils/Effect.js.map +0 -1
- package/version.d.ts +0 -2
- package/version.d.ts.map +0 -1
- package/version.js +0 -8
- package/version.js.map +0 -1
- package/webhooks.d.ts +0 -8
- package/webhooks.d.ts.map +0 -1
- package/webhooks.js +0 -55
- package/webhooks.js.map +0 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { NodeHttpClient, NodeSocket } from "@effect/platform-node"
|
|
2
|
+
import { Discord, DiscordConfig, Ix } from "dfx"
|
|
3
|
+
import { DiscordLive, runIx } from "dfx/gateway"
|
|
4
|
+
import Dotenv from "dotenv"
|
|
5
|
+
import { Config, Effect, Layer, pipe } from "effect"
|
|
6
|
+
|
|
7
|
+
Dotenv.config()
|
|
8
|
+
|
|
9
|
+
// Create the dependencies layer
|
|
10
|
+
const DiscordConfigLive = DiscordConfig.layerConfig({
|
|
11
|
+
token: Config.redacted("DISCORD_BOT_TOKEN"),
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
// Create your interaction definitions.
|
|
15
|
+
// Here we are creating a global application command.
|
|
16
|
+
const hello = Ix.global(
|
|
17
|
+
{
|
|
18
|
+
name: "hello",
|
|
19
|
+
description: "A basic command",
|
|
20
|
+
},
|
|
21
|
+
Effect.succeed({
|
|
22
|
+
type: 4,
|
|
23
|
+
data: {
|
|
24
|
+
content: "Hello!",
|
|
25
|
+
},
|
|
26
|
+
}),
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
// Optionally use the type safe helpers
|
|
30
|
+
const greeting = Ix.global(
|
|
31
|
+
{
|
|
32
|
+
name: "greeting",
|
|
33
|
+
description: "A basic command",
|
|
34
|
+
options: [
|
|
35
|
+
{
|
|
36
|
+
type: Discord.ApplicationCommandOptionType.STRING,
|
|
37
|
+
name: "who",
|
|
38
|
+
description: "who to greet",
|
|
39
|
+
required: true,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
type: Discord.ApplicationCommandOptionType.STRING,
|
|
43
|
+
name: "greeting",
|
|
44
|
+
description: "What kind of greeting?",
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
ix =>
|
|
49
|
+
Effect.succeed({
|
|
50
|
+
type: 4,
|
|
51
|
+
data: {
|
|
52
|
+
content: `${ix.optionValueOrElse("greeting", () => "Hello")} ${ix.optionValue("who")}!`,
|
|
53
|
+
},
|
|
54
|
+
// fail: ix.optionValue("fail"), // <- this would be a type error
|
|
55
|
+
}),
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
// Build your program use `Ix.builder`
|
|
59
|
+
const program = Effect.gen(function* () {
|
|
60
|
+
const interactions = pipe(
|
|
61
|
+
Ix.builder.add(hello).add(greeting),
|
|
62
|
+
runIx(Effect.catch(e => Effect.logError("CAUGHT INTERACTION ERROR", e))),
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
yield* Effect.asVoid(interactions)
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
const EnvLive = DiscordLive.pipe(
|
|
69
|
+
Layer.provide(NodeHttpClient.layerUndici),
|
|
70
|
+
Layer.provide(NodeSocket.layerWebSocketConstructor),
|
|
71
|
+
Layer.provide(DiscordConfigLive),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
// Run it
|
|
75
|
+
program.pipe(
|
|
76
|
+
Effect.provide(EnvLive),
|
|
77
|
+
Effect.tapCause(Effect.logError),
|
|
78
|
+
Effect.runFork,
|
|
79
|
+
)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { NodeHttpClient, NodeRuntime, NodeSocket } from "@effect/platform-node"
|
|
2
|
+
import { DiscordConfig, Ix } from "dfx"
|
|
3
|
+
import { DiscordIxLive, InteractionsRegistry } from "dfx/gateway"
|
|
4
|
+
import * as Dotenv from "dotenv"
|
|
5
|
+
import { Config, Effect, Layer } from "effect"
|
|
6
|
+
|
|
7
|
+
Dotenv.config()
|
|
8
|
+
|
|
9
|
+
// Create a layer for the discord services
|
|
10
|
+
const DiscordLayer = DiscordIxLive.pipe(
|
|
11
|
+
Layer.provide([
|
|
12
|
+
DiscordConfig.layerConfig({
|
|
13
|
+
token: Config.redacted("DISCORD_BOT_TOKEN"),
|
|
14
|
+
}),
|
|
15
|
+
NodeHttpClient.layerUndici,
|
|
16
|
+
NodeSocket.layerWebSocketConstructor,
|
|
17
|
+
]),
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
// Create hello service
|
|
21
|
+
const HelloLayer = Layer.effectDiscard(
|
|
22
|
+
Effect.gen(function* () {
|
|
23
|
+
const registry = yield* InteractionsRegistry
|
|
24
|
+
|
|
25
|
+
// Create hello command that responds with "Hello!"
|
|
26
|
+
const hello = Ix.global(
|
|
27
|
+
{
|
|
28
|
+
name: "hello",
|
|
29
|
+
description: "A basic command",
|
|
30
|
+
},
|
|
31
|
+
Effect.succeed({
|
|
32
|
+
type: 4,
|
|
33
|
+
data: {
|
|
34
|
+
content: "Hello!",
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
// register the command(s) and handle errors
|
|
40
|
+
yield* registry.register(
|
|
41
|
+
Ix.builder.add(hello).catchAllCause(Effect.logError),
|
|
42
|
+
)
|
|
43
|
+
}),
|
|
44
|
+
).pipe(
|
|
45
|
+
// provide discord layer
|
|
46
|
+
Layer.provide(DiscordLayer),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
// Construct the main layer
|
|
50
|
+
const MainLive = Layer.mergeAll(
|
|
51
|
+
// add your other services here
|
|
52
|
+
HelloLayer,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
// run it
|
|
56
|
+
NodeRuntime.runMain(Layer.launch(MainLive))
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { NodeHttpClient, NodeRuntime, NodeSocket } from "@effect/platform-node"
|
|
2
|
+
import { Discord, DiscordConfig, Ix, UI } from "dfx"
|
|
3
|
+
import { DiscordIxLive, InteractionsRegistry } from "dfx/gateway"
|
|
4
|
+
import Dotenv from "dotenv"
|
|
5
|
+
import { Config, Effect, Layer } from "effect"
|
|
6
|
+
|
|
7
|
+
Dotenv.config()
|
|
8
|
+
|
|
9
|
+
// Create your service and register your interactions
|
|
10
|
+
const makeGreetService = Effect.gen(function* () {
|
|
11
|
+
const registry = yield* InteractionsRegistry
|
|
12
|
+
|
|
13
|
+
const greet = Ix.global(
|
|
14
|
+
{
|
|
15
|
+
name: "greet",
|
|
16
|
+
description: "A basic command",
|
|
17
|
+
options: [
|
|
18
|
+
{
|
|
19
|
+
name: "name",
|
|
20
|
+
description: "who to greet",
|
|
21
|
+
type: Discord.ApplicationCommandOptionType.STRING,
|
|
22
|
+
required: true,
|
|
23
|
+
},
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
ix =>
|
|
27
|
+
Effect.succeed(
|
|
28
|
+
Ix.response({
|
|
29
|
+
type: Discord.InteractionCallbackTypes.CHANNEL_MESSAGE_WITH_SOURCE,
|
|
30
|
+
data: UI.components([
|
|
31
|
+
UI.textDisplay(`Hello ${ix.optionValue("name")}!`),
|
|
32
|
+
UI.row([
|
|
33
|
+
UI.button({ custom_id: "one", label: "Click me!" }),
|
|
34
|
+
UI.button({ custom_id: "two", label: "Click me 2!" }),
|
|
35
|
+
]),
|
|
36
|
+
]),
|
|
37
|
+
}),
|
|
38
|
+
),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
// create a builder
|
|
42
|
+
const ix = Ix.builder.add(greet).catchAllCause(Effect.logError)
|
|
43
|
+
|
|
44
|
+
// register the interactions
|
|
45
|
+
yield* registry.register(ix)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
// Greet service layer
|
|
49
|
+
const GreetLive = Layer.effectDiscard(makeGreetService)
|
|
50
|
+
|
|
51
|
+
// Main layer
|
|
52
|
+
const MainLive = GreetLive.pipe(
|
|
53
|
+
Layer.provide(DiscordIxLive),
|
|
54
|
+
Layer.provide(NodeHttpClient.layerUndici),
|
|
55
|
+
Layer.provide(NodeSocket.layerWebSocketConstructor),
|
|
56
|
+
Layer.provide(
|
|
57
|
+
DiscordConfig.layerConfig({
|
|
58
|
+
token: Config.redacted("DISCORD_BOT_TOKEN"),
|
|
59
|
+
}),
|
|
60
|
+
),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
Layer.launch(MainLive).pipe(
|
|
64
|
+
Effect.catchCause(Effect.logError),
|
|
65
|
+
NodeRuntime.runMain,
|
|
66
|
+
)
|
package/flake.lock
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"nodes": {
|
|
3
|
+
"nixpkgs": {
|
|
4
|
+
"locked": {
|
|
5
|
+
"lastModified": 1747060738,
|
|
6
|
+
"narHash": "sha256-ByfPRQuqj+nhtVV0koinEpmJw0KLzNbgcgi9EF+NVow=",
|
|
7
|
+
"owner": "nixos",
|
|
8
|
+
"repo": "nixpkgs",
|
|
9
|
+
"rev": "eaeed9530c76ce5f1d2d8232e08bec5e26f18ec1",
|
|
10
|
+
"type": "github"
|
|
11
|
+
},
|
|
12
|
+
"original": {
|
|
13
|
+
"owner": "nixos",
|
|
14
|
+
"ref": "nixpkgs-unstable",
|
|
15
|
+
"repo": "nixpkgs",
|
|
16
|
+
"type": "github"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"root": {
|
|
20
|
+
"inputs": {
|
|
21
|
+
"nixpkgs": "nixpkgs"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"root": "root",
|
|
26
|
+
"version": 7
|
|
27
|
+
}
|
package/flake.nix
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
inputs = {
|
|
3
|
+
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
|
4
|
+
};
|
|
5
|
+
outputs = {nixpkgs, ...}: let
|
|
6
|
+
forAllSystems = function:
|
|
7
|
+
nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed (
|
|
8
|
+
system: function nixpkgs.legacyPackages.${system}
|
|
9
|
+
);
|
|
10
|
+
in {
|
|
11
|
+
formatter = forAllSystems (pkgs: pkgs.alejandra);
|
|
12
|
+
devShells = forAllSystems (pkgs: {
|
|
13
|
+
default = pkgs.mkShell {
|
|
14
|
+
packages = with pkgs; [
|
|
15
|
+
corepack
|
|
16
|
+
nodejs
|
|
17
|
+
];
|
|
18
|
+
};
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
}
|
package/lerna.json
ADDED
package/package.json
CHANGED
|
@@ -1,48 +1,92 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dfx",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"packageManager": "pnpm@10.11.0+sha512.6540583f41cc5f628eb3d9773ecee802f4f9ef9923cc45b69890fb47991d4b092964694ec3a4f738a420c918a333062c8b925d312f42e4f0c263eb603551f977",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public",
|
|
8
|
+
"directory": "dist"
|
|
9
|
+
},
|
|
4
10
|
"description": "Effect-TS discord library",
|
|
5
|
-
"
|
|
11
|
+
"author": "Tim Smart <hello@timsmart.co>",
|
|
6
12
|
"repository": {
|
|
7
13
|
"type": "git",
|
|
8
14
|
"url": "https://github.com/tim-smart/dfx.git"
|
|
9
15
|
},
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"default": "./index.js"
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"sideEffects": [],
|
|
36
|
-
"author": "Tim Smart <hello@timsmart.co>",
|
|
37
|
-
"dependencies": {
|
|
38
|
-
"discord-api-types": "^0.38.40"
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"scripts": {
|
|
18
|
+
"example": "ts-node --project tsconfig.examples.json",
|
|
19
|
+
"prepublishOnly": "pnpm build",
|
|
20
|
+
"types": "./scripts/generate-client.sh",
|
|
21
|
+
"clean": "rimraf build tsbuildinfo dist .cache",
|
|
22
|
+
"prebuild": "node -p \"'export const LIB_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
|
|
23
|
+
"build": "pnpm prebuild && pnpm build-all && pnpm build-pack",
|
|
24
|
+
"build-cjs": "babel build/esm --config-file ./.babel.cjs.json --out-dir build/cjs --out-file-extension .js --source-maps",
|
|
25
|
+
"build-mjs": "babel build/esm --config-file ./.babel.mjs.json --out-dir build/mjs --out-file-extension .mjs --source-maps",
|
|
26
|
+
"build-post": "build-utils pack-v1",
|
|
27
|
+
"build-pack": "concurrently \"pnpm build-cjs\" \"pnpm build-mjs\" && pnpm build-post",
|
|
28
|
+
"build-all": "tsc -b tsconfig.json",
|
|
29
|
+
"build-watch": "tsc -b tsconfig.json --watch",
|
|
30
|
+
"check": "pnpm lint && pnpm tsgo -b tsconfig.json",
|
|
31
|
+
"lint": "oxlint src test examples",
|
|
32
|
+
"autofix": "pnpm lint --fix",
|
|
33
|
+
"circular": "madge --ts-config ./tsconfig.madge.json --circular --no-color --no-spinner --warning build/esm",
|
|
34
|
+
"test": "vitest",
|
|
35
|
+
"coverage": "vitest run --coverage",
|
|
36
|
+
"prepare": "husky && effect-language-service patch"
|
|
39
37
|
},
|
|
40
38
|
"peerDependencies": {
|
|
41
|
-
"effect": "4.0.0-beta.
|
|
39
|
+
"effect": "4.0.0-beta.13"
|
|
42
40
|
},
|
|
43
41
|
"optionalDependencies": {
|
|
44
42
|
"discord-verify": "^1.2.0"
|
|
45
43
|
},
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@babel/cli": "^7.28.6",
|
|
46
|
+
"@babel/core": "^7.29.0",
|
|
47
|
+
"@babel/plugin-syntax-import-attributes": "^7.28.6",
|
|
48
|
+
"@babel/plugin-transform-modules-commonjs": "^7.28.6",
|
|
49
|
+
"@changesets/changelog-github": "^0.5.2",
|
|
50
|
+
"@changesets/cli": "^2.29.8",
|
|
51
|
+
"@effect/babel-plugin": "^0.2.0",
|
|
52
|
+
"@effect/build-utils": "^0.8.9",
|
|
53
|
+
"@effect/language-service": "^0.75.1",
|
|
54
|
+
"@effect/platform-node": "4.0.0-beta.13",
|
|
55
|
+
"@tim-smart/openapi-gen": "^1.0.1",
|
|
56
|
+
"@types/chai": "^5.2.3",
|
|
57
|
+
"@types/node": "^25.3.0",
|
|
58
|
+
"@types/ws": "^8.18.1",
|
|
59
|
+
"@typescript/native-preview": "7.0.0-dev.20260220.1",
|
|
60
|
+
"@vitejs/plugin-react": "^5.1.4",
|
|
61
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
62
|
+
"babel-plugin-annotate-pure-calls": "^0.5.0",
|
|
63
|
+
"concurrently": "^9.2.1",
|
|
64
|
+
"dotenv": "^17.3.1",
|
|
65
|
+
"effect": "4.0.0-beta.13",
|
|
66
|
+
"husky": "^9.1.7",
|
|
67
|
+
"lerna": "^9.0.4",
|
|
68
|
+
"lint-staged": "^16.2.7",
|
|
69
|
+
"madge": "^8.0.0",
|
|
70
|
+
"oxlint": "^1.49.0",
|
|
71
|
+
"prettier": "^3.8.1",
|
|
72
|
+
"rimraf": "^6.1.3",
|
|
73
|
+
"ts-node": "^10.9.2",
|
|
74
|
+
"tsx": "^4.21.0",
|
|
75
|
+
"typescript": "^5.9.3",
|
|
76
|
+
"vite": "^7.3.1",
|
|
77
|
+
"vitest": "4.0.18"
|
|
78
|
+
},
|
|
79
|
+
"gitHead": "0d54571712ab8f506ebf334bff7f5c1db42c354a",
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"discord-api-types": "^0.38.40"
|
|
82
|
+
},
|
|
83
|
+
"lint-staged": {
|
|
84
|
+
"*.{ts,tsx}": [
|
|
85
|
+
"oxlint --fix",
|
|
86
|
+
"prettier --write"
|
|
87
|
+
],
|
|
88
|
+
"*.{json,md,yml,yaml}": [
|
|
89
|
+
"prettier --write"
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
mkdir -p tmp
|
|
4
|
+
curl https://raw.githubusercontent.com/discord/discord-api-spec/refs/heads/main/specs/openapi.json -o tmp/openapi.json
|
|
5
|
+
pnpm openapi-gen -n DiscordRest -s tmp/openapi.json > src/DiscordREST/Generated.ts
|
|
6
|
+
|
|
7
|
+
echo "// oxlint-disable no-shadow
|
|
8
|
+
$(cat src/DiscordREST/Generated.ts)" > src/DiscordREST/Generated.ts
|
|
9
|
+
|
|
10
|
+
pnpm prettier -w src/DiscordREST/Generated.ts
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="vitest" />
|
|
2
|
+
|
|
3
|
+
import babel from "@vitejs/plugin-react"
|
|
4
|
+
import path from "path"
|
|
5
|
+
import { defineConfig } from "vite"
|
|
6
|
+
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
8
|
+
const babelConfig = require("./.babel.mjs.json")
|
|
9
|
+
|
|
10
|
+
export default defineConfig({
|
|
11
|
+
plugins: [babel({ babel: babelConfig })],
|
|
12
|
+
test: {
|
|
13
|
+
include: ["./test/**/*.test.ts"],
|
|
14
|
+
globals: true,
|
|
15
|
+
},
|
|
16
|
+
resolve: {
|
|
17
|
+
alias: {
|
|
18
|
+
"dfx/test": path.join(__dirname, "test"),
|
|
19
|
+
dfx: path.join(__dirname, "src"),
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
})
|
package/Cache/driver.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type * as Option from "effect/Option";
|
|
2
|
-
import type * as Effect from "effect/Effect";
|
|
3
|
-
export interface ParentCacheDriver<E, T> {
|
|
4
|
-
readonly size: Effect.Effect<number, E>;
|
|
5
|
-
sizeForParent: (parentId: string) => Effect.Effect<number, E>;
|
|
6
|
-
get: (parentId: string, resourceId: string) => Effect.Effect<Option.Option<T>, E>;
|
|
7
|
-
getForParent: (parentId: string) => Effect.Effect<Option.Option<ReadonlyMap<string, T>>, E>;
|
|
8
|
-
set: (parentId: string, resourceId: string, resource: T) => Effect.Effect<void, E>;
|
|
9
|
-
delete: (parentId: string, resourceId: string) => Effect.Effect<void, E>;
|
|
10
|
-
parentDelete: (parentId: string) => Effect.Effect<void, E>;
|
|
11
|
-
refreshTTL: (parentId: string, resourceId: string) => Effect.Effect<void, E>;
|
|
12
|
-
readonly run: Effect.Effect<never, E>;
|
|
13
|
-
}
|
|
14
|
-
export declare const createParentDriver: <E, T>(driver: ParentCacheDriver<E, T>) => ParentCacheDriver<E, T>;
|
|
15
|
-
export interface CacheDriver<E, T> {
|
|
16
|
-
readonly size: Effect.Effect<number, E>;
|
|
17
|
-
get: (resourceId: string) => Effect.Effect<Option.Option<T>, E>;
|
|
18
|
-
set: (resourceId: string, resource: T) => Effect.Effect<void, E>;
|
|
19
|
-
delete: (resourceId: string) => Effect.Effect<void, E>;
|
|
20
|
-
refreshTTL: (resourceId: string) => Effect.Effect<void, E>;
|
|
21
|
-
readonly run: Effect.Effect<never, E>;
|
|
22
|
-
}
|
|
23
|
-
export declare const createDriver: <E, T>(driver: CacheDriver<E, T>) => CacheDriver<E, T>;
|
|
24
|
-
//# sourceMappingURL=driver.d.ts.map
|
package/Cache/driver.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/Cache/driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAE5C,MAAM,WAAW,iBAAiB,CAAC,CAAC,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC7D,GAAG,EAAE,CACH,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACvC,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5D,GAAG,EAAE,CACH,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,CAAC,KACR,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC3B,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACxE,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC1D,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;CACtC;AAED,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,4BAChE,CAAA;AAER,MAAM,WAAW,WAAW,CAAC,CAAC,EAAE,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/D,GAAG,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACtD,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC1D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;CACtC;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,sBAAW,CAAA"}
|
package/Cache/driver.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createParentDriver = exports.createDriver = void 0;
|
|
7
|
-
const createParentDriver = driver => driver;
|
|
8
|
-
exports.createParentDriver = createParentDriver;
|
|
9
|
-
const createDriver = driver => driver;
|
|
10
|
-
exports.createDriver = createDriver;
|
|
11
|
-
//# sourceMappingURL=driver.js.map
|
package/Cache/driver.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","names":["createParentDriver","driver","exports","createDriver"],"sources":["../src/Cache/driver.ts"],"sourcesContent":[null],"mappings":";;;;;;AAwBO,MAAMA,kBAAkB,GAAUC,MAA+B,IACtEA,MAAM;AAAAC,OAAA,CAAAF,kBAAA,GAAAA,kBAAA;AAWD,MAAMG,YAAY,GAAUF,MAAyB,IAAKA,MAAM;AAAAC,OAAA,CAAAC,YAAA,GAAAA,YAAA","ignoreList":[]}
|
package/Cache/memory.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import type { CacheDriver, ParentCacheDriver } from "./driver.ts";
|
|
3
|
-
export declare const createWithParent: <T>() => Effect.Effect<ParentCacheDriver<never, T>>;
|
|
4
|
-
export declare const create: <T>() => Effect.Effect<CacheDriver<never, T>>;
|
|
5
|
-
//# sourceMappingURL=memory.d.ts.map
|
package/Cache/memory.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/Cache/memory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGjE,eAAO,MAAM,gBAAgB,GAAI,CAAC,OAAK,MAAM,CAAC,MAAM,CAClD,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAgDzB,CAAA;AAEJ,eAAO,MAAM,MAAM,GAAI,CAAC,OAAK,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CA0B5D,CAAA"}
|
package/Cache/memory.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.createWithParent = exports.create = void 0;
|
|
7
|
-
var Option = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Option"));
|
|
8
|
-
var Effect = /*#__PURE__*/_interopRequireWildcard(/*#__PURE__*/require("effect/Effect"));
|
|
9
|
-
var _driver = /*#__PURE__*/require("./driver.js");
|
|
10
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
-
const createWithParent = () => Effect.sync(() => {
|
|
12
|
-
const map = new Map();
|
|
13
|
-
return (0, _driver.createParentDriver)({
|
|
14
|
-
size: Effect.sync(() => {
|
|
15
|
-
let count = 0;
|
|
16
|
-
for (const a of map.values()) {
|
|
17
|
-
count += a.size;
|
|
18
|
-
}
|
|
19
|
-
return count;
|
|
20
|
-
}),
|
|
21
|
-
sizeForParent: parentId => Effect.sync(() => map.get(parentId)?.size ?? 0),
|
|
22
|
-
get: (parentId, resourceId) => Effect.sync(() => Option.fromNullishOr(map.get(parentId)?.get(resourceId))),
|
|
23
|
-
getForParent: parentId => Effect.sync(() => Option.fromNullishOr(map.get(parentId))),
|
|
24
|
-
set: (parentId, resourceId, resource) => Effect.sync(() => {
|
|
25
|
-
if (!map.has(parentId)) {
|
|
26
|
-
map.set(parentId, new Map());
|
|
27
|
-
}
|
|
28
|
-
map.get(parentId).set(resourceId, resource);
|
|
29
|
-
}),
|
|
30
|
-
delete: (parentId, resourceId) => Effect.sync(() => {
|
|
31
|
-
map.get(parentId)?.delete(resourceId);
|
|
32
|
-
}),
|
|
33
|
-
parentDelete: parentId => Effect.sync(() => {
|
|
34
|
-
map.delete(parentId);
|
|
35
|
-
}),
|
|
36
|
-
refreshTTL: () => Effect.void,
|
|
37
|
-
run: Effect.never
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
exports.createWithParent = createWithParent;
|
|
41
|
-
const create = () => Effect.sync(() => {
|
|
42
|
-
const map = new Map();
|
|
43
|
-
return (0, _driver.createDriver)({
|
|
44
|
-
size: Effect.sync(() => map.size),
|
|
45
|
-
get: resourceId => Effect.sync(() => Option.fromNullishOr(map.get(resourceId))),
|
|
46
|
-
set: (resourceId, resource) => Effect.sync(() => {
|
|
47
|
-
map.set(resourceId, resource);
|
|
48
|
-
}),
|
|
49
|
-
delete: resourceId => Effect.sync(() => {
|
|
50
|
-
map.delete(resourceId);
|
|
51
|
-
}),
|
|
52
|
-
refreshTTL: () => Effect.void,
|
|
53
|
-
run: Effect.never
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
exports.create = create;
|
|
57
|
-
//# sourceMappingURL=memory.js.map
|
package/Cache/memory.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","names":["Option","_interopRequireWildcard","require","Effect","_driver","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","createWithParent","sync","map","Map","createParentDriver","size","count","a","values","sizeForParent","parentId","resourceId","fromNullishOr","getForParent","resource","delete","parentDelete","refreshTTL","void","run","never","exports","create","createDriver"],"sources":["../src/Cache/memory.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/Cache/memoryTTL.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { CacheDriver, ParentCacheDriver } from "./driver.ts";
|
|
2
|
-
import * as Duration from "effect/Duration";
|
|
3
|
-
import * as Effect from "effect/Effect";
|
|
4
|
-
export interface MemoryTTLOpts {
|
|
5
|
-
/** The approx. number of milliseconds to keep items */
|
|
6
|
-
readonly ttl: Duration.Duration;
|
|
7
|
-
/**
|
|
8
|
-
* How often items should be cleared.
|
|
9
|
-
*/
|
|
10
|
-
readonly resolution?: Duration.Duration;
|
|
11
|
-
/**
|
|
12
|
-
* What sweep strategy to use.
|
|
13
|
-
*
|
|
14
|
-
* "activity" means the TTL is reset for every `set` OR `get` operation
|
|
15
|
-
* "usage" means the TTL is only reset for the `get` operation
|
|
16
|
-
*
|
|
17
|
-
* Defaults to "usage"
|
|
18
|
-
*/
|
|
19
|
-
readonly strategy?: "activity" | "usage" | "expiry";
|
|
20
|
-
}
|
|
21
|
-
export declare const create: <T>(opts: MemoryTTLOpts) => Effect.Effect<CacheDriver<never, T>>;
|
|
22
|
-
export declare const createWithParent: <T>(opts: MemoryTTLOpts) => Effect.Effect<ParentCacheDriver<never, T>>;
|
|
23
|
-
//# sourceMappingURL=memoryTTL.d.ts.map
|
package/Cache/memoryTTL.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memoryTTL.d.ts","sourceRoot":"","sources":["../src/Cache/memoryTTL.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGjE,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAOvC,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,CAAA;IAE/B;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAA;IAEvC;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;CACpD;AA6GD,eAAO,MAAM,MAAM,GAAI,CAAC,EACtB,MAAM,aAAa,KAClB,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAqC,CAAA;AAE3E,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,MAAM,aAAa,KAClB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,CAgFxC,CAAA"}
|