@effect/platform-node 4.0.0-rc.109 → 4.0.0-rc.111
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/ai-docs/package.json +2 -2
- package/ai-docs/src/70_cli/10_basics.ts +4 -2
- package/dist/NodeRedis.d.ts.map +1 -1
- package/dist/NodeRedis.js +51 -0
- package/dist/NodeRedis.js.map +1 -1
- package/package.json +9 -9
- package/src/NodeRedis.ts +53 -0
package/ai-docs/package.json
CHANGED
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"@effect/sql-sqlite-wasm": "workspace:*",
|
|
28
28
|
"@effect/vitest": "workspace:*",
|
|
29
29
|
"effect": "workspace:*",
|
|
30
|
-
"hono": "^4.
|
|
31
|
-
"nodemailer": "^9.0.
|
|
30
|
+
"hono": "^4.13.2",
|
|
31
|
+
"nodemailer": "^9.0.5"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@types/nodemailer": "^8.0.1"
|
|
@@ -23,7 +23,8 @@ const tasks = Command.make("tasks").pipe(
|
|
|
23
23
|
workspace,
|
|
24
24
|
verbose: Flag.boolean("verbose").pipe(
|
|
25
25
|
Flag.withAlias("v"),
|
|
26
|
-
Flag.withDescription("Print diagnostic output")
|
|
26
|
+
Flag.withDescription("Print diagnostic output"),
|
|
27
|
+
Flag.withDefault(false)
|
|
27
28
|
)
|
|
28
29
|
}),
|
|
29
30
|
Command.withDescription("Track and manage tasks")
|
|
@@ -92,7 +93,8 @@ const list = Command.make(
|
|
|
92
93
|
Flag.withDefault("open")
|
|
93
94
|
),
|
|
94
95
|
json: Flag.boolean("json").pipe(
|
|
95
|
-
Flag.withDescription("Print machine-readable output")
|
|
96
|
+
Flag.withDescription("Print machine-readable output"),
|
|
97
|
+
Flag.withDefault(false)
|
|
96
98
|
)
|
|
97
99
|
},
|
|
98
100
|
Effect.fn(function*({ status, json }) {
|
package/dist/NodeRedis.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeRedis.d.ts","sourceRoot":"","sources":["../src/NodeRedis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"NodeRedis.d.ts","sourceRoot":"","sources":["../src/NodeRedis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,mCAAmC,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAsB,MAAM,OAAO,CAAA;AAExD,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AACtD,KAAK,sBAAsB,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;;qBAW1D,eAAe;kBAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC;;AAVrG;;;;;;;GAOG;AACH,qBAAa,SAAU,SAAQ,cAGQ;CAAG;AAwH1C;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,KAAK,aACN,sBAAsB,GAAG,SAAS,KAC3C,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,UAAU,CAAuC,CAAA;AAE/F;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,WAAW,EAAE,CACxB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,KACzC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAO5E,CAAA"}
|
package/dist/NodeRedis.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import * as Config from "effect/Config";
|
|
14
14
|
import * as Context from "effect/Context";
|
|
15
|
+
import * as Deferred from "effect/Deferred";
|
|
15
16
|
import * as Effect from "effect/Effect";
|
|
16
17
|
import * as Fn from "effect/Function";
|
|
17
18
|
import * as Layer from "effect/Layer";
|
|
@@ -70,6 +71,56 @@ const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
|
70
71
|
catch: cause => new Redis.RedisError({
|
|
71
72
|
cause
|
|
72
73
|
})
|
|
74
|
+
}),
|
|
75
|
+
subscribe: (channel, onMessage) => Effect.gen(function* () {
|
|
76
|
+
const terminal = yield* Deferred.make();
|
|
77
|
+
yield* Effect.acquireRelease(Effect.tryPromise({
|
|
78
|
+
try: async () => {
|
|
79
|
+
let subscriberReady = false;
|
|
80
|
+
const subscriber = client.duplicate(socket?.reconnectStrategy === undefined ? {
|
|
81
|
+
socket: {
|
|
82
|
+
...socket,
|
|
83
|
+
reconnectStrategy: (retries, cause) => {
|
|
84
|
+
if (!subscriberReady) return cause;
|
|
85
|
+
if (cause instanceof SocketTimeoutError) return false;
|
|
86
|
+
const jitter = Math.floor(Math.random() * 200);
|
|
87
|
+
const delay = Math.min(2 ** retries * 50, 2000);
|
|
88
|
+
return delay + jitter;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
} : {});
|
|
92
|
+
subscriber.once("ready", () => {
|
|
93
|
+
subscriberReady = true;
|
|
94
|
+
});
|
|
95
|
+
subscriber.on("error", cause => {
|
|
96
|
+
runSync(Effect.logWarning("NodeRedis subscriber error", cause));
|
|
97
|
+
if (!subscriber.isOpen) {
|
|
98
|
+
runSync(Deferred.fail(terminal, new Redis.RedisError({
|
|
99
|
+
cause
|
|
100
|
+
})));
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
try {
|
|
104
|
+
await subscriber.connect();
|
|
105
|
+
await subscriber.subscribe(channel, (message, channel) => {
|
|
106
|
+
onMessage({
|
|
107
|
+
channel,
|
|
108
|
+
message
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
return subscriber;
|
|
112
|
+
} catch (cause) {
|
|
113
|
+
if (subscriber.isOpen) subscriber.destroy();
|
|
114
|
+
throw cause;
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
catch: cause => new Redis.RedisError({
|
|
118
|
+
cause
|
|
119
|
+
})
|
|
120
|
+
}), subscriber => Effect.sync(() => {
|
|
121
|
+
if (subscriber.isOpen) subscriber.destroy();
|
|
122
|
+
}));
|
|
123
|
+
return Deferred.await(terminal);
|
|
73
124
|
})
|
|
74
125
|
});
|
|
75
126
|
const nodeRedis = Fn.identity({
|
package/dist/NodeRedis.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeRedis.js","names":[],"sources":["../src/NodeRedis.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"NodeRedis.js","names":[],"sources":["../src/NodeRedis.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;;;;;;;;AAYA,OAAO,KAAK,MAAM,MAAM,eAAe;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAK,QAAQ,MAAM,iBAAiB;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe;AACvC,OAAO,KAAK,EAAE,MAAM,iBAAiB;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc;AACrC,OAAO,KAAK,KAAK,MAAM,mCAAmC;AAC1D,SAAS,YAAY,EAAE,kBAAkB,QAAQ,OAAO;AAKxD;;;;;;;;AAQA,OAAM,MAAO,SAAU,sBAAQ,OAAO,CAAC,OAAO,EAG1C,CAAC,iCAAiC,CAAC;AAEvC,MAAM,IAAI,gBAAG,MAAM,CAAC,UAAU,CAAC,WAC7B,OAAgC;EAEhC,IAAI,KAAK,GAAG,KAAK;EACjB,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM;EAC9B,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,cAAc,CACzC,MAAM,CAAC,IAAI,CAAC,MACV,YAAY,CAAC;IACX,GAAG,OAAO;IACV,MAAM,EAAE,MAAM,EAAE,iBAAiB,KAAK,SAAS,GAC3C;MACA,GAAG,MAAM;MACT,iBAAiB,EAAE,CAAC,OAAO,EAAE,KAAK,KAAI;QACpC,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK;QACxB,IAAI,KAAK,YAAY,kBAAkB,EAAE,OAAO,KAAK;QACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,GAAG,EAAE,EAAE,IAAI,CAAC;QAC/C,OAAO,KAAK,GAAG,MAAM;MACvB;KACD,GACC;GACL,CAAC,CACH,EACA,MAAM,IAAK,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CACrE;EACD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAK;IACxB,KAAK,GAAG,IAAI;EACd,CAAC,CAAC;EAEF;EACA;EACA;EACA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,MAAM,CAAC,OAAO,EAAS,CAAC;EAClE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAG,KAAK,IAAI;IAC3B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;EAC7D,CAAC,CAAC;EAEF,OAAO,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE;IAC3B,KAAK,EAAG,KAAK,IAAK,IAAI,KAAK,CAAC,UAAU,CAAC;MAAE;IAAK,CAAE;GACjD,CAAC;EAEF,MAAM,GAAG,GAAO,CAA0C,IACxD,MAAM,CAAC,UAAU,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC;IACpB,KAAK,EAAG,KAAK,IAAK,IAAI,KAAK,CAAC,UAAU,CAAC;MAAE;IAAK,CAAE;GACjD,CAAC;EAEJ,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAc,OAAe,EAAE,GAAG,IAA2B,KACjE,MAAM,CAAC,UAAU,CAAC;MAChB,GAAG,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAe;MAC/D,KAAK,EAAG,KAAK,IAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QAAE;MAAK,CAAE;KACjD,CAAC;IACJ,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,KAC5B,MAAM,CAAC,GAAG,CAAC,aAAS;MAClB,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,IAAI,EAA0B;MAC/D,OAAO,MAAM,CAAC,cAAc,CAC1B,MAAM,CAAC,UAAU,CAAC;QAChB,GAAG,EAAE,YAAW;UACd,IAAI,eAAe,GAAG,KAAK;UAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CACjC,MAAM,EAAE,iBAAiB,KAAK,SAAS,GACnC;YACA,MAAM,EAAE;cACN,GAAG,MAAM;cACT,iBAAiB,EAAE,CAAC,OAAO,EAAE,KAAK,KAAI;gBACpC,IAAI,CAAC,eAAe,EAAE,OAAO,KAAK;gBAClC,IAAI,KAAK,YAAY,kBAAkB,EAAE,OAAO,KAAK;gBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,GAAG,EAAE,EAAE,IAAI,CAAC;gBAC/C,OAAO,KAAK,GAAG,MAAM;cACvB;;WAEH,GACC,EAAE,CACP;UACD,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,MAAK;YAC5B,eAAe,GAAG,IAAI;UACxB,CAAC,CAAC;UACF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAG,KAAK,IAAI;YAC/B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YAC/D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;cACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,CAAC,UAAU,CAAC;gBAAE;cAAK,CAAE,CAAC,CAAC,CAAC;YACnE;UACF,CAAC,CAAC;UACF,IAAI;YACF,MAAM,UAAU,CAAC,OAAO,EAAE;YAC1B,MAAM,UAAU,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAI;cACvD,SAAS,CAAC;gBAAE,OAAO;gBAAE;cAAO,CAAE,CAAC;YACjC,CAAC,CAAC;YACF,OAAO,UAAU;UACnB,CAAC,CAAC,OAAO,KAAK,EAAE;YACd,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE;YAC3C,MAAM,KAAK;UACb;QACF,CAAC;QACD,KAAK,EAAG,KAAK,IAAK,IAAI,KAAK,CAAC,UAAU,CAAC;UAAE;QAAK,CAAE;OACjD,CAAC,EACD,UAAU,IACT,MAAM,CAAC,IAAI,CAAC,MAAK;QACf,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE;MAC7C,CAAC,CAAC,CACL;MACD,OAAO,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;IACjC,CAAC;GACJ,CAAC;EAEF,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAuB;IAClD,MAAM;IACN;GACD,CAAC;EAEF,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAChC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;AAkBA,OAAO,MAAM,KAAK,GAChB,OAA4C,IACe,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAE/F;;;;;;;;;;;;;;;;;;AAkBA,OAAO,MAAM,WAAW,GAGtB,OAA4C,IAE5C,KAAK,CAAC,aAAa,CACjB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CACrB,CACF","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/platform-node",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.0.0-rc.
|
|
4
|
+
"version": "4.0.0-rc.111",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Platform specific implementations for the Node.js runtime",
|
|
7
7
|
"homepage": "https://effect.website",
|
|
@@ -53,20 +53,20 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"mime": "^4.1.0",
|
|
56
|
-
"undici": "^8.
|
|
57
|
-
"@effect/platform-node-shared": "^4.0.0-rc.
|
|
56
|
+
"undici": "^8.10.0",
|
|
57
|
+
"@effect/platform-node-shared": "^4.0.0-rc.111"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
60
|
"redis": ">=5.0.0 <7.0.0",
|
|
61
|
-
"effect": "^4.0.0-rc.
|
|
61
|
+
"effect": "^4.0.0-rc.111"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@testcontainers/mysql": "^12.0
|
|
65
|
-
"@testcontainers/postgresql": "^12.0
|
|
66
|
-
"@testcontainers/redis": "^12.0
|
|
67
|
-
"@types/node": "^26.
|
|
64
|
+
"@testcontainers/mysql": "^12.1.0",
|
|
65
|
+
"@testcontainers/postgresql": "^12.1.0",
|
|
66
|
+
"@testcontainers/redis": "^12.1.0",
|
|
67
|
+
"@types/node": "^26.2.0",
|
|
68
68
|
"redis": "^6.2.1",
|
|
69
|
-
"effect": "^4.0.0-rc.
|
|
69
|
+
"effect": "^4.0.0-rc.111"
|
|
70
70
|
},
|
|
71
71
|
"scripts": {
|
|
72
72
|
"codegen": "effect-utils codegen",
|
package/src/NodeRedis.ts
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import * as Config from "effect/Config"
|
|
14
14
|
import * as Context from "effect/Context"
|
|
15
|
+
import * as Deferred from "effect/Deferred"
|
|
15
16
|
import * as Effect from "effect/Effect"
|
|
16
17
|
import * as Fn from "effect/Function"
|
|
17
18
|
import * as Layer from "effect/Layer"
|
|
@@ -87,6 +88,58 @@ const make = Effect.fnUntraced(function*(
|
|
|
87
88
|
Effect.tryPromise({
|
|
88
89
|
try: () => client.sendCommand([command, ...args]) as Promise<A>,
|
|
89
90
|
catch: (cause) => new Redis.RedisError({ cause })
|
|
91
|
+
}),
|
|
92
|
+
subscribe: (channel, onMessage) =>
|
|
93
|
+
Effect.gen(function*() {
|
|
94
|
+
const terminal = yield* Deferred.make<void, Redis.RedisError>()
|
|
95
|
+
yield* Effect.acquireRelease(
|
|
96
|
+
Effect.tryPromise({
|
|
97
|
+
try: async () => {
|
|
98
|
+
let subscriberReady = false
|
|
99
|
+
const subscriber = client.duplicate(
|
|
100
|
+
socket?.reconnectStrategy === undefined
|
|
101
|
+
? {
|
|
102
|
+
socket: {
|
|
103
|
+
...socket,
|
|
104
|
+
reconnectStrategy: (retries, cause) => {
|
|
105
|
+
if (!subscriberReady) return cause
|
|
106
|
+
if (cause instanceof SocketTimeoutError) return false
|
|
107
|
+
const jitter = Math.floor(Math.random() * 200)
|
|
108
|
+
const delay = Math.min(2 ** retries * 50, 2000)
|
|
109
|
+
return delay + jitter
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
: {}
|
|
114
|
+
)
|
|
115
|
+
subscriber.once("ready", () => {
|
|
116
|
+
subscriberReady = true
|
|
117
|
+
})
|
|
118
|
+
subscriber.on("error", (cause) => {
|
|
119
|
+
runSync(Effect.logWarning("NodeRedis subscriber error", cause))
|
|
120
|
+
if (!subscriber.isOpen) {
|
|
121
|
+
runSync(Deferred.fail(terminal, new Redis.RedisError({ cause })))
|
|
122
|
+
}
|
|
123
|
+
})
|
|
124
|
+
try {
|
|
125
|
+
await subscriber.connect()
|
|
126
|
+
await subscriber.subscribe(channel, (message, channel) => {
|
|
127
|
+
onMessage({ channel, message })
|
|
128
|
+
})
|
|
129
|
+
return subscriber
|
|
130
|
+
} catch (cause) {
|
|
131
|
+
if (subscriber.isOpen) subscriber.destroy()
|
|
132
|
+
throw cause
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
catch: (cause) => new Redis.RedisError({ cause })
|
|
136
|
+
}),
|
|
137
|
+
(subscriber) =>
|
|
138
|
+
Effect.sync(() => {
|
|
139
|
+
if (subscriber.isOpen) subscriber.destroy()
|
|
140
|
+
})
|
|
141
|
+
)
|
|
142
|
+
return Deferred.await(terminal)
|
|
90
143
|
})
|
|
91
144
|
})
|
|
92
145
|
|