@effect/platform-node-shared 0.29.4 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/NodeClusterRunnerSocket/package.json +6 -0
  2. package/NodeClusterShardManagerSocket/package.json +6 -0
  3. package/NodeClusterSocketCommon/package.json +6 -0
  4. package/NodeSocketServer/package.json +6 -0
  5. package/dist/cjs/NodeClusterRunnerSocket.js +49 -0
  6. package/dist/cjs/NodeClusterRunnerSocket.js.map +1 -0
  7. package/dist/cjs/NodeClusterShardManagerSocket.js +38 -0
  8. package/dist/cjs/NodeClusterShardManagerSocket.js.map +1 -0
  9. package/dist/cjs/NodeClusterSocketCommon.js +34 -0
  10. package/dist/cjs/NodeClusterSocketCommon.js.map +1 -0
  11. package/dist/cjs/NodeSocket.js +2 -1
  12. package/dist/cjs/NodeSocket.js.map +1 -1
  13. package/dist/cjs/NodeSocketServer.js +149 -0
  14. package/dist/cjs/NodeSocketServer.js.map +1 -0
  15. package/dist/dts/NodeClusterRunnerSocket.d.ts +24 -0
  16. package/dist/dts/NodeClusterRunnerSocket.d.ts.map +1 -0
  17. package/dist/dts/NodeClusterShardManagerSocket.d.ts +22 -0
  18. package/dist/dts/NodeClusterShardManagerSocket.d.ts.map +1 -0
  19. package/dist/dts/NodeClusterSocketCommon.d.ts +12 -0
  20. package/dist/dts/NodeClusterSocketCommon.d.ts.map +1 -0
  21. package/dist/dts/NodeSocket.d.ts.map +1 -1
  22. package/dist/dts/NodeSocketServer.d.ts +44 -0
  23. package/dist/dts/NodeSocketServer.d.ts.map +1 -0
  24. package/dist/esm/NodeClusterRunnerSocket.js +39 -0
  25. package/dist/esm/NodeClusterRunnerSocket.js.map +1 -0
  26. package/dist/esm/NodeClusterShardManagerSocket.js +28 -0
  27. package/dist/esm/NodeClusterShardManagerSocket.js.map +1 -0
  28. package/dist/esm/NodeClusterSocketCommon.js +25 -0
  29. package/dist/esm/NodeClusterSocketCommon.js.map +1 -0
  30. package/dist/esm/NodeSocket.js +2 -1
  31. package/dist/esm/NodeSocket.js.map +1 -1
  32. package/dist/esm/NodeSocketServer.js +137 -0
  33. package/dist/esm/NodeSocketServer.js.map +1 -0
  34. package/package.json +40 -4
  35. package/src/NodeClusterRunnerSocket.ts +78 -0
  36. package/src/NodeClusterShardManagerSocket.ts +54 -0
  37. package/src/NodeClusterSocketCommon.ts +35 -0
  38. package/src/NodeSocket.ts +47 -48
  39. package/src/NodeSocketServer.ts +225 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as RunnerHealth from "@effect/cluster/RunnerHealth";
5
+ import * as ShardingConfig from "@effect/cluster/ShardingConfig";
6
+ import * as ShardManager from "@effect/cluster/ShardManager";
7
+ import * as ShardStorage from "@effect/cluster/ShardStorage";
8
+ import * as SocketShardManager from "@effect/cluster/SocketShardManager";
9
+ import * as SqlShardStorage from "@effect/cluster/SqlShardStorage";
10
+ import * as RpcSerialization from "@effect/rpc/RpcSerialization";
11
+ import * as Effect from "effect/Effect";
12
+ import * as Layer from "effect/Layer";
13
+ import { layerClientProtocol } from "./NodeClusterSocketCommon.js";
14
+ import * as NodeSocketServer from "./NodeSocketServer.js";
15
+ /**
16
+ * @since 1.0.0
17
+ * @category Layers
18
+ */
19
+ export const layerSocketServer = /*#__PURE__*/Effect.gen(function* () {
20
+ const config = yield* ShardingConfig.ShardingConfig;
21
+ return NodeSocketServer.layer(config.shardManagerAddress);
22
+ }).pipe(Layer.unwrapEffect);
23
+ /**
24
+ * @since 1.0.0
25
+ * @category Layers
26
+ */
27
+ export const layer = options => SocketShardManager.layer.pipe(Layer.provide([RunnerHealth.layerRpc, layerSocketServer, ShardManager.layerConfigFromEnv]), Layer.provide(layerClientProtocol), Layer.provide(options?.storage === "sql" ? SqlShardStorage.layer : ShardStorage.layerNoop), Layer.provide([options?.serialization === "ndjson" ? RpcSerialization.layerNdjson : RpcSerialization.layerMsgPack, ShardingConfig.layerFromEnv(options?.shardingConfig)]));
28
+ //# sourceMappingURL=NodeClusterShardManagerSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeClusterShardManagerSocket.js","names":["RunnerHealth","ShardingConfig","ShardManager","ShardStorage","SocketShardManager","SqlShardStorage","RpcSerialization","Effect","Layer","layerClientProtocol","NodeSocketServer","layerSocketServer","gen","config","layer","shardManagerAddress","pipe","unwrapEffect","options","provide","layerRpc","layerConfigFromEnv","storage","layerNoop","serialization","layerNdjson","layerMsgPack","layerFromEnv","shardingConfig"],"sources":["../../src/NodeClusterShardManagerSocket.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,YAAY,MAAM,8BAA8B;AAC5D,OAAO,KAAKC,cAAc,MAAM,gCAAgC;AAChE,OAAO,KAAKC,YAAY,MAAM,8BAA8B;AAC5D,OAAO,KAAKC,YAAY,MAAM,8BAA8B;AAC5D,OAAO,KAAKC,kBAAkB,MAAM,oCAAoC;AACxE,OAAO,KAAKC,eAAe,MAAM,iCAAiC;AAElE,OAAO,KAAKC,gBAAgB,MAAM,8BAA8B;AAIhE,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,SAASC,mBAAmB,QAAQ,8BAA8B;AAClE,OAAO,KAAKC,gBAAgB,MAAM,uBAAuB;AAEzD;;;;AAIA,OAAO,MAAMC,iBAAiB,gBAI1BJ,MAAM,CAACK,GAAG,CAAC,aAAS;EACtB,MAAMC,MAAM,GAAG,OAAOZ,cAAc,CAACA,cAAc;EACnD,OAAOS,gBAAgB,CAACI,KAAK,CAACD,MAAM,CAACE,mBAAmB,CAAC;AAC3D,CAAC,CAAC,CAACC,IAAI,CAACR,KAAK,CAACS,YAAY,CAAC;AAE3B;;;;AAIA,OAAO,MAAMH,KAAK,GAAmDI,OAIpE,IAKCd,kBAAkB,CAACU,KAAK,CAACE,IAAI,CAC3BR,KAAK,CAACW,OAAO,CAAC,CAACnB,YAAY,CAACoB,QAAQ,EAAET,iBAAiB,EAAET,YAAY,CAACmB,kBAAkB,CAAC,CAAC,EAC1Fb,KAAK,CAACW,OAAO,CAACV,mBAAmB,CAAC,EAClCD,KAAK,CAACW,OAAO,CAACD,OAAO,EAAEI,OAAO,KAAK,KAAK,GAAGjB,eAAe,CAACS,KAAK,GAAGX,YAAY,CAACoB,SAAS,CAAC,EAC1Ff,KAAK,CAACW,OAAO,CAAC,CACZD,OAAO,EAAEM,aAAa,KAAK,QAAQ,GAAGlB,gBAAgB,CAACmB,WAAW,GAAGnB,gBAAgB,CAACoB,YAAY,EAClGzB,cAAc,CAAC0B,YAAY,CAACT,OAAO,EAAEU,cAAc,CAAC,CACrD,CAAC,CACI","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Runners from "@effect/cluster/Runners";
5
+ import { Socket } from "@effect/platform/Socket";
6
+ import * as RpcClient from "@effect/rpc/RpcClient";
7
+ import * as RpcSerialization from "@effect/rpc/RpcSerialization";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Layer from "effect/Layer";
10
+ import * as NodeSocket from "./NodeSocket.js";
11
+ /**
12
+ * @since 1.0.0
13
+ * @category Layers
14
+ */
15
+ export const layerClientProtocol = /*#__PURE__*/Layer.effect(Runners.RpcClientProtocol, /*#__PURE__*/Effect.gen(function* () {
16
+ const serialization = yield* RpcSerialization.RpcSerialization;
17
+ return Effect.fnUntraced(function* (address) {
18
+ const socket = yield* NodeSocket.makeNet({
19
+ host: address.host,
20
+ port: address.port
21
+ });
22
+ return yield* RpcClient.makeProtocolSocket.pipe(Effect.provideService(Socket, socket), Effect.provideService(RpcSerialization.RpcSerialization, serialization));
23
+ }, Effect.orDie);
24
+ }));
25
+ //# sourceMappingURL=NodeClusterSocketCommon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeClusterSocketCommon.js","names":["Runners","Socket","RpcClient","RpcSerialization","Effect","Layer","NodeSocket","layerClientProtocol","effect","RpcClientProtocol","gen","serialization","fnUntraced","address","socket","makeNet","host","port","makeProtocolSocket","pipe","provideService","orDie"],"sources":["../../src/NodeClusterSocketCommon.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,OAAO,MAAM,yBAAyB;AAClD,SAASC,MAAM,QAAQ,yBAAyB;AAChD,OAAO,KAAKC,SAAS,MAAM,uBAAuB;AAClD,OAAO,KAAKC,gBAAgB,MAAM,8BAA8B;AAChE,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,OAAO,KAAKC,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,UAAU,MAAM,iBAAiB;AAE7C;;;;AAIA,OAAO,MAAMC,mBAAmB,gBAI5BF,KAAK,CAACG,MAAM,CACdR,OAAO,CAACS,iBAAiB,eACzBL,MAAM,CAACM,GAAG,CAAC,aAAS;EAClB,MAAMC,aAAa,GAAG,OAAOR,gBAAgB,CAACA,gBAAgB;EAC9D,OAAOC,MAAM,CAACQ,UAAU,CAAC,WAAUC,OAAO;IACxC,MAAMC,MAAM,GAAG,OAAOR,UAAU,CAACS,OAAO,CAAC;MACvCC,IAAI,EAAEH,OAAO,CAACG,IAAI;MAClBC,IAAI,EAAEJ,OAAO,CAACI;KACf,CAAC;IACF,OAAO,OAAOf,SAAS,CAACgB,kBAAkB,CAACC,IAAI,CAC7Cf,MAAM,CAACgB,cAAc,CAACnB,MAAM,EAAEa,MAAM,CAAC,EACrCV,MAAM,CAACgB,cAAc,CAACjB,gBAAgB,CAACA,gBAAgB,EAAEQ,aAAa,CAAC,CACxE;EACH,CAAC,EAAEP,MAAM,CAACiB,KAAK,CAAC;AAClB,CAAC,CAAC,CACH","ignoreList":[]}
@@ -26,6 +26,7 @@ export const makeNet = options => fromDuplex(Effect.acquireRelease(Effect.async(
26
26
  resume(Effect.succeed(conn));
27
27
  });
28
28
  conn.on("error", cause => {
29
+ conn.removeAllListeners();
29
30
  resume(Effect.fail(new Socket.SocketGenericError({
30
31
  reason: "Open",
31
32
  cause
@@ -53,7 +54,7 @@ export const fromDuplex = open => Effect.withFiberRuntime(fiber => {
53
54
  let currentSocket;
54
55
  const latch = Effect.unsafeMakeLatch(false);
55
56
  const openContext = fiber.currentContext;
56
- const run = handler => Effect.scopedWith(scope => Effect.gen(function* () {
57
+ const run = handler => Effect.scopedWith(Effect.fnUntraced(function* (scope) {
57
58
  const fiberSet = yield* FiberSet.make().pipe(Scope.extend(scope));
58
59
  const conn = yield* Scope.extend(open, scope);
59
60
  const run = yield* Effect.provideService(FiberSet.runtime(fiberSet)(), NetSocket, conn);
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSocket.js","names":["Socket","Channel","Context","Deferred","Effect","FiberSet","Layer","Scope","Net","NetSocket","GenericTag","makeNet","options","fromDuplex","acquireRelease","async","resume","conn","createConnection","on","removeAllListeners","succeed","cause","fail","SocketGenericError","reason","sync","destroy","closed","destroySoon","open","withFiberRuntime","fiber","currentSocket","latch","unsafeMakeLatch","openContext","currentContext","run","handler","scopedWith","scope","gen","fiberSet","make","pipe","extend","provideService","runtime","onData","chunk","result","isEffect","onEnd","unsafeDone","deferred","void","onError","onClose","hadError","SocketCloseError","code","addFinalizer","off","join","mapInputContext","input","merge","ensuring","unsafeClose","undefined","interruptible","write","whenOpen","isCloseEvent","Error","writer","writableEnded","end","of","TypeId","runRaw","makeNetChannel","unwrapScoped","map","toChannelWith","layerNet","effect"],"sources":["../../src/NodeSocket.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"NodeSocket.js","names":["Socket","Channel","Context","Deferred","Effect","FiberSet","Layer","Scope","Net","NetSocket","GenericTag","makeNet","options","fromDuplex","acquireRelease","async","resume","conn","createConnection","on","removeAllListeners","succeed","cause","fail","SocketGenericError","reason","sync","destroy","closed","destroySoon","open","withFiberRuntime","fiber","currentSocket","latch","unsafeMakeLatch","openContext","currentContext","run","handler","scopedWith","fnUntraced","scope","fiberSet","make","pipe","extend","provideService","runtime","onData","chunk","result","isEffect","onEnd","unsafeDone","deferred","void","onError","onClose","hadError","SocketCloseError","code","addFinalizer","off","join","mapInputContext","input","merge","ensuring","unsafeClose","undefined","interruptible","write","whenOpen","isCloseEvent","Error","writer","writableEnded","end","of","TypeId","runRaw","makeNetChannel","unwrapScoped","map","toChannelWith","layerNet","effect"],"sources":["../../src/NodeSocket.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Socket from "@effect/platform/Socket";
5
+ import * as SocketServer from "@effect/platform/SocketServer";
6
+ import * as Context from "effect/Context";
7
+ import * as Effect from "effect/Effect";
8
+ import * as Exit from "effect/Exit";
9
+ import * as FiberRef from "effect/FiberRef";
10
+ import * as FiberSet from "effect/FiberSet";
11
+ import { pipe } from "effect/Function";
12
+ import * as Layer from "effect/Layer";
13
+ import * as Scope from "effect/Scope";
14
+ import * as Net from "node:net";
15
+ import * as WS from "ws";
16
+ import * as NodeSocket from "./NodeSocket.js";
17
+ /**
18
+ * @since 1.0.0
19
+ * @category tags
20
+ */
21
+ export class IncomingMessage extends /*#__PURE__*/Context.Tag("@effect/platform-node-shared/NodeSocketServer/IncomingMessage")() {}
22
+ /**
23
+ * @since 1.0.0
24
+ * @category constructors
25
+ */
26
+ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
27
+ const server = yield* Effect.acquireRelease(Effect.sync(() => Net.createServer(options)), server => Effect.async(resume => {
28
+ server.close(() => resume(Effect.void));
29
+ }));
30
+ yield* Effect.async(resume => {
31
+ server.once("error", cause => {
32
+ resume(Effect.fail(new SocketServer.SocketServerError({
33
+ reason: "Open",
34
+ cause
35
+ })));
36
+ });
37
+ server.listen(options, () => {
38
+ resume(Effect.void);
39
+ });
40
+ });
41
+ const run = Effect.fnUntraced(function* (handler) {
42
+ const scope = yield* Scope.make();
43
+ const fiberSet = yield* FiberSet.make().pipe(Scope.extend(scope));
44
+ const run = yield* FiberSet.runtime(fiberSet)();
45
+ function onConnection(conn) {
46
+ pipe(NodeSocket.fromDuplex(Effect.acquireRelease(Effect.succeed(conn), conn => Effect.sync(() => {
47
+ if (conn.closed === false) {
48
+ conn.destroySoon();
49
+ }
50
+ }))), Effect.flatMap(handler), Effect.catchAllCause(reportUnhandledError), Effect.provideService(NodeSocket.NetSocket, conn), run);
51
+ }
52
+ return yield* Effect.async(_resume => {
53
+ server.on("connection", onConnection);
54
+ return Effect.sync(() => {
55
+ server.off("connection", onConnection);
56
+ });
57
+ }).pipe(Effect.ensuring(Scope.close(scope, Exit.void)));
58
+ });
59
+ const address = server.address();
60
+ return SocketServer.SocketServer.of({
61
+ address: typeof address === "string" ? {
62
+ _tag: "UnixAddress",
63
+ path: address
64
+ } : {
65
+ _tag: "TcpAddress",
66
+ hostname: address.address,
67
+ port: address.port
68
+ },
69
+ run
70
+ });
71
+ });
72
+ /**
73
+ * @since 1.0.0
74
+ * @category layers
75
+ */
76
+ export const layer = options => Layer.scoped(SocketServer.SocketServer, make(options));
77
+ /**
78
+ * @since 1.0.0
79
+ * @category constructors
80
+ */
81
+ export const makeWebSocket = /*#__PURE__*/Effect.fnUntraced(function* (options) {
82
+ const server = yield* Effect.acquireRelease(Effect.sync(() => new WS.WebSocketServer(options)), server => Effect.async(resume => {
83
+ server.close(() => resume(Effect.void));
84
+ }));
85
+ yield* Effect.async(resume => {
86
+ server.once("error", error => {
87
+ resume(Effect.fail(new SocketServer.SocketServerError({
88
+ reason: "Open",
89
+ cause: error
90
+ })));
91
+ });
92
+ server.once("listening", () => {
93
+ resume(Effect.void);
94
+ });
95
+ });
96
+ const run = Effect.fnUntraced(function* (handler) {
97
+ const scope = yield* Scope.make();
98
+ const fiberSet = yield* FiberSet.make().pipe(Scope.extend(scope));
99
+ const run = yield* FiberSet.runtime(fiberSet)();
100
+ function onConnection(conn, req) {
101
+ pipe(Socket.fromWebSocket(Effect.acquireRelease(Effect.succeed(conn), conn => Effect.sync(() => {
102
+ conn.close();
103
+ }))), Effect.flatMap(handler), Effect.catchAllCause(reportUnhandledError), Effect.provideService(Socket.WebSocket, conn), Effect.provideService(IncomingMessage, req), run);
104
+ }
105
+ return yield* Effect.async(_resume => {
106
+ server.on("connection", onConnection);
107
+ return Effect.sync(() => {
108
+ server.off("connection", onConnection);
109
+ });
110
+ }).pipe(Effect.ensuring(Scope.close(scope, Exit.void)));
111
+ });
112
+ const address = server.address();
113
+ return SocketServer.SocketServer.of({
114
+ address: typeof address === "string" ? {
115
+ _tag: "UnixAddress",
116
+ path: address
117
+ } : {
118
+ _tag: "TcpAddress",
119
+ hostname: address.address,
120
+ port: address.port
121
+ },
122
+ run
123
+ });
124
+ });
125
+ /**
126
+ * @since 1.0.0
127
+ * @category layers
128
+ */
129
+ export const layerWebSocket = options => Layer.scoped(SocketServer.SocketServer, makeWebSocket(options));
130
+ const reportUnhandledError = cause => Effect.withFiberRuntime(fiber => {
131
+ const unhandledLogLevel = fiber.getFiberRef(FiberRef.unhandledErrorLogLevel);
132
+ if (unhandledLogLevel._tag === "Some") {
133
+ return Effect.logWithLevel(unhandledLogLevel.value, cause, "Unhandled error in SocketServer");
134
+ }
135
+ return Effect.void;
136
+ });
137
+ //# sourceMappingURL=NodeSocketServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeSocketServer.js","names":["Socket","SocketServer","Context","Effect","Exit","FiberRef","FiberSet","pipe","Layer","Scope","Net","WS","NodeSocket","IncomingMessage","Tag","make","fnUntraced","options","server","acquireRelease","sync","createServer","async","resume","close","void","once","cause","fail","SocketServerError","reason","listen","run","handler","scope","fiberSet","extend","runtime","onConnection","conn","fromDuplex","succeed","closed","destroySoon","flatMap","catchAllCause","reportUnhandledError","provideService","NetSocket","_resume","on","off","ensuring","address","of","_tag","path","hostname","port","layer","scoped","makeWebSocket","WebSocketServer","error","req","fromWebSocket","WebSocket","layerWebSocket","withFiberRuntime","fiber","unhandledLogLevel","getFiberRef","unhandledErrorLogLevel","logWithLevel","value"],"sources":["../../src/NodeSocketServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/platform-node-shared",
3
- "version": "0.29.4",
3
+ "version": "0.30.0",
4
4
  "description": "Unified interfaces for common platform-specific services",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -11,17 +11,36 @@
11
11
  "sideEffects": [],
12
12
  "dependencies": {
13
13
  "@parcel/watcher": "^2.4.1",
14
- "multipasta": "^0.2.5"
14
+ "multipasta": "^0.2.5",
15
+ "ws": "^8.18.0"
15
16
  },
16
17
  "peerDependencies": {
17
- "@effect/platform": "^0.79.4",
18
- "effect": "^3.13.12"
18
+ "@effect/cluster": "^0.29.0",
19
+ "@effect/platform": "^0.80.0",
20
+ "@effect/rpc": "^0.55.0",
21
+ "@effect/sql": "^0.33.0",
22
+ "effect": "^3.14.0"
19
23
  },
20
24
  "publishConfig": {
21
25
  "provenance": true
22
26
  },
23
27
  "exports": {
24
28
  "./package.json": "./package.json",
29
+ "./NodeClusterRunnerSocket": {
30
+ "types": "./dist/dts/NodeClusterRunnerSocket.d.ts",
31
+ "import": "./dist/esm/NodeClusterRunnerSocket.js",
32
+ "default": "./dist/cjs/NodeClusterRunnerSocket.js"
33
+ },
34
+ "./NodeClusterShardManagerSocket": {
35
+ "types": "./dist/dts/NodeClusterShardManagerSocket.d.ts",
36
+ "import": "./dist/esm/NodeClusterShardManagerSocket.js",
37
+ "default": "./dist/cjs/NodeClusterShardManagerSocket.js"
38
+ },
39
+ "./NodeClusterSocketCommon": {
40
+ "types": "./dist/dts/NodeClusterSocketCommon.d.ts",
41
+ "import": "./dist/esm/NodeClusterSocketCommon.js",
42
+ "default": "./dist/cjs/NodeClusterSocketCommon.js"
43
+ },
25
44
  "./NodeCommandExecutor": {
26
45
  "types": "./dist/dts/NodeCommandExecutor.d.ts",
27
46
  "import": "./dist/esm/NodeCommandExecutor.js",
@@ -67,6 +86,11 @@
67
86
  "import": "./dist/esm/NodeSocket.js",
68
87
  "default": "./dist/cjs/NodeSocket.js"
69
88
  },
89
+ "./NodeSocketServer": {
90
+ "types": "./dist/dts/NodeSocketServer.d.ts",
91
+ "import": "./dist/esm/NodeSocketServer.js",
92
+ "default": "./dist/cjs/NodeSocketServer.js"
93
+ },
70
94
  "./NodeStream": {
71
95
  "types": "./dist/dts/NodeStream.d.ts",
72
96
  "import": "./dist/esm/NodeStream.js",
@@ -80,6 +104,15 @@
80
104
  },
81
105
  "typesVersions": {
82
106
  "*": {
107
+ "NodeClusterRunnerSocket": [
108
+ "./dist/dts/NodeClusterRunnerSocket.d.ts"
109
+ ],
110
+ "NodeClusterShardManagerSocket": [
111
+ "./dist/dts/NodeClusterShardManagerSocket.d.ts"
112
+ ],
113
+ "NodeClusterSocketCommon": [
114
+ "./dist/dts/NodeClusterSocketCommon.d.ts"
115
+ ],
83
116
  "NodeCommandExecutor": [
84
117
  "./dist/dts/NodeCommandExecutor.d.ts"
85
118
  ],
@@ -107,6 +140,9 @@
107
140
  "NodeSocket": [
108
141
  "./dist/dts/NodeSocket.d.ts"
109
142
  ],
143
+ "NodeSocketServer": [
144
+ "./dist/dts/NodeSocketServer.d.ts"
145
+ ],
110
146
  "NodeStream": [
111
147
  "./dist/dts/NodeStream.d.ts"
112
148
  ],
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as MessageStorage from "@effect/cluster/MessageStorage"
5
+ import type * as Runners from "@effect/cluster/Runners"
6
+ import type { Sharding } from "@effect/cluster/Sharding"
7
+ import * as ShardingConfig from "@effect/cluster/ShardingConfig"
8
+ import * as ShardStorage from "@effect/cluster/ShardStorage"
9
+ import * as SocketRunner from "@effect/cluster/SocketRunner"
10
+ import * as SqlMessageStorage from "@effect/cluster/SqlMessageStorage"
11
+ import * as SqlShardStorage from "@effect/cluster/SqlShardStorage"
12
+ import type * as SocketServer from "@effect/platform/SocketServer"
13
+ import * as RpcSerialization from "@effect/rpc/RpcSerialization"
14
+ import type { SqlClient } from "@effect/sql/SqlClient"
15
+ import type { SqlError } from "@effect/sql/SqlError"
16
+ import type { ConfigError } from "effect/ConfigError"
17
+ import * as Effect from "effect/Effect"
18
+ import * as Layer from "effect/Layer"
19
+ import * as Option from "effect/Option"
20
+ import { layerClientProtocol } from "./NodeClusterSocketCommon.js"
21
+ import * as NodeSocketServer from "./NodeSocketServer.js"
22
+
23
+ /**
24
+ * @since 1.0.0
25
+ * @category Layers
26
+ */
27
+ export const layerSocketServer: Layer.Layer<
28
+ SocketServer.SocketServer,
29
+ SocketServer.SocketServerError,
30
+ ShardingConfig.ShardingConfig
31
+ > = Effect.gen(function*() {
32
+ const config = yield* ShardingConfig.ShardingConfig
33
+ if (Option.isNone(config.runnerAddress)) {
34
+ return yield* Effect.dieMessage("layerSocketServer: ShardingConfig.runnerAddress is None")
35
+ }
36
+ return NodeSocketServer.layer(config.runnerAddress.value)
37
+ }).pipe(Layer.unwrapEffect)
38
+
39
+ /**
40
+ * @since 1.0.0
41
+ * @category Layers
42
+ */
43
+ export const layer = <const ClientOnly extends boolean = false, const Storage extends "noop" | "sql" = "noop">(
44
+ options?: {
45
+ readonly serialization?: "msgpack" | "ndjson" | undefined
46
+ readonly clientOnly?: ClientOnly | undefined
47
+ readonly storage?: Storage | undefined
48
+ readonly shardingConfig?: Partial<ShardingConfig.ShardingConfig["Type"]> | undefined
49
+ }
50
+ ): ClientOnly extends true ? Layer.Layer<
51
+ Sharding | Runners.Runners,
52
+ ConfigError,
53
+ Storage extends "sql" ? SqlClient : never
54
+ > :
55
+ Layer.Layer<
56
+ Sharding | Runners.Runners,
57
+ SocketServer.SocketServerError | ConfigError | (Storage extends "sql" ? SqlError : never),
58
+ Storage extends "sql" ? SqlClient : never
59
+ > =>
60
+ {
61
+ const layer: Layer.Layer<any, any, any> = options?.clientOnly
62
+ // client only
63
+ ? Layer.provide(SocketRunner.layerClientOnly, layerClientProtocol)
64
+ // with server
65
+ : Layer.provide(SocketRunner.layer, [layerSocketServer, layerClientProtocol])
66
+
67
+ return layer.pipe(
68
+ Layer.provide(
69
+ options?.storage === "sql"
70
+ ? options.clientOnly ? [SqlMessageStorage.layer] : [SqlMessageStorage.layer, SqlShardStorage.layer]
71
+ : [MessageStorage.layerNoop, ShardStorage.layerNoop]
72
+ ),
73
+ Layer.provide(ShardingConfig.layerFromEnv(options?.shardingConfig)),
74
+ Layer.provide(
75
+ options?.serialization === "ndjson" ? RpcSerialization.layerNdjson : RpcSerialization.layerMsgPack
76
+ )
77
+ ) as any
78
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as RunnerHealth from "@effect/cluster/RunnerHealth"
5
+ import * as ShardingConfig from "@effect/cluster/ShardingConfig"
6
+ import * as ShardManager from "@effect/cluster/ShardManager"
7
+ import * as ShardStorage from "@effect/cluster/ShardStorage"
8
+ import * as SocketShardManager from "@effect/cluster/SocketShardManager"
9
+ import * as SqlShardStorage from "@effect/cluster/SqlShardStorage"
10
+ import type * as SocketServer from "@effect/platform/SocketServer"
11
+ import * as RpcSerialization from "@effect/rpc/RpcSerialization"
12
+ import type { SqlClient } from "@effect/sql/SqlClient"
13
+ import type { SqlError } from "@effect/sql/SqlError"
14
+ import type { ConfigError } from "effect/ConfigError"
15
+ import * as Effect from "effect/Effect"
16
+ import * as Layer from "effect/Layer"
17
+ import { layerClientProtocol } from "./NodeClusterSocketCommon.js"
18
+ import * as NodeSocketServer from "./NodeSocketServer.js"
19
+
20
+ /**
21
+ * @since 1.0.0
22
+ * @category Layers
23
+ */
24
+ export const layerSocketServer: Layer.Layer<
25
+ SocketServer.SocketServer,
26
+ SocketServer.SocketServerError,
27
+ ShardingConfig.ShardingConfig
28
+ > = Effect.gen(function*() {
29
+ const config = yield* ShardingConfig.ShardingConfig
30
+ return NodeSocketServer.layer(config.shardManagerAddress)
31
+ }).pipe(Layer.unwrapEffect)
32
+
33
+ /**
34
+ * @since 1.0.0
35
+ * @category Layers
36
+ */
37
+ export const layer = <const Storage extends "sql" | "noop" = "noop">(options?: {
38
+ readonly serialization?: "msgpack" | "ndjson" | undefined
39
+ readonly shardingConfig?: Partial<ShardingConfig.ShardingConfig["Type"]> | undefined
40
+ readonly storage?: Storage | undefined
41
+ }): Layer.Layer<
42
+ ShardManager.ShardManager,
43
+ SocketServer.SocketServerError | ConfigError | (Storage extends "sql" ? SqlError : never),
44
+ Storage extends "sql" ? SqlClient : never
45
+ > =>
46
+ SocketShardManager.layer.pipe(
47
+ Layer.provide([RunnerHealth.layerRpc, layerSocketServer, ShardManager.layerConfigFromEnv]),
48
+ Layer.provide(layerClientProtocol),
49
+ Layer.provide(options?.storage === "sql" ? SqlShardStorage.layer : ShardStorage.layerNoop),
50
+ Layer.provide([
51
+ options?.serialization === "ndjson" ? RpcSerialization.layerNdjson : RpcSerialization.layerMsgPack,
52
+ ShardingConfig.layerFromEnv(options?.shardingConfig)
53
+ ])
54
+ ) as any
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+ import * as Runners from "@effect/cluster/Runners"
5
+ import { Socket } from "@effect/platform/Socket"
6
+ import * as RpcClient from "@effect/rpc/RpcClient"
7
+ import * as RpcSerialization from "@effect/rpc/RpcSerialization"
8
+ import * as Effect from "effect/Effect"
9
+ import * as Layer from "effect/Layer"
10
+ import * as NodeSocket from "./NodeSocket.js"
11
+
12
+ /**
13
+ * @since 1.0.0
14
+ * @category Layers
15
+ */
16
+ export const layerClientProtocol: Layer.Layer<
17
+ Runners.RpcClientProtocol,
18
+ never,
19
+ RpcSerialization.RpcSerialization
20
+ > = Layer.effect(
21
+ Runners.RpcClientProtocol,
22
+ Effect.gen(function*() {
23
+ const serialization = yield* RpcSerialization.RpcSerialization
24
+ return Effect.fnUntraced(function*(address) {
25
+ const socket = yield* NodeSocket.makeNet({
26
+ host: address.host,
27
+ port: address.port
28
+ })
29
+ return yield* RpcClient.makeProtocolSocket.pipe(
30
+ Effect.provideService(Socket, socket),
31
+ Effect.provideService(RpcSerialization.RpcSerialization, serialization)
32
+ )
33
+ }, Effect.orDie)
34
+ })
35
+ )
package/src/NodeSocket.ts CHANGED
@@ -45,6 +45,7 @@ export const makeNet = (
45
45
  resume(Effect.succeed(conn))
46
46
  })
47
47
  conn.on("error", (cause) => {
48
+ conn.removeAllListeners()
48
49
  resume(Effect.fail(new Socket.SocketGenericError({ reason: "Open", cause })))
49
50
  })
50
51
  return Effect.sync(() => {
@@ -77,60 +78,58 @@ export const fromDuplex = <RO>(
77
78
  const latch = Effect.unsafeMakeLatch(false)
78
79
  const openContext = fiber.currentContext as Context.Context<RO>
79
80
  const run = <R, E, _>(handler: (_: Uint8Array) => Effect.Effect<_, E, R> | void) =>
80
- Effect.scopedWith((scope) =>
81
- Effect.gen(function*() {
82
- const fiberSet = yield* FiberSet.make<any, E | Socket.SocketError>().pipe(
83
- Scope.extend(scope)
84
- )
85
- const conn = yield* Scope.extend(open, scope)
86
- const run = yield* Effect.provideService(FiberSet.runtime(fiberSet)<R>(), NetSocket, conn as Net.Socket)
81
+ Effect.scopedWith(Effect.fnUntraced(function*(scope) {
82
+ const fiberSet = yield* FiberSet.make<any, E | Socket.SocketError>().pipe(
83
+ Scope.extend(scope)
84
+ )
85
+ const conn = yield* Scope.extend(open, scope)
86
+ const run = yield* Effect.provideService(FiberSet.runtime(fiberSet)<R>(), NetSocket, conn as Net.Socket)
87
87
 
88
- function onData(chunk: Uint8Array) {
89
- const result = handler(chunk)
90
- if (Effect.isEffect(result)) {
91
- run(result)
92
- }
93
- }
94
- function onEnd() {
95
- Deferred.unsafeDone(fiberSet.deferred, Effect.void)
88
+ function onData(chunk: Uint8Array) {
89
+ const result = handler(chunk)
90
+ if (Effect.isEffect(result)) {
91
+ run(result)
96
92
  }
97
- function onError(cause: Error) {
98
- Deferred.unsafeDone(
99
- fiberSet.deferred,
100
- Effect.fail(new Socket.SocketGenericError({ reason: "Read", cause }))
101
- )
102
- }
103
- function onClose(hadError: boolean) {
104
- Deferred.unsafeDone(
105
- fiberSet.deferred,
106
- Effect.fail(
107
- new Socket.SocketCloseError({
108
- reason: "Close",
109
- code: hadError ? 1006 : 1000
110
- })
111
- )
93
+ }
94
+ function onEnd() {
95
+ Deferred.unsafeDone(fiberSet.deferred, Effect.void)
96
+ }
97
+ function onError(cause: Error) {
98
+ Deferred.unsafeDone(
99
+ fiberSet.deferred,
100
+ Effect.fail(new Socket.SocketGenericError({ reason: "Read", cause }))
101
+ )
102
+ }
103
+ function onClose(hadError: boolean) {
104
+ Deferred.unsafeDone(
105
+ fiberSet.deferred,
106
+ Effect.fail(
107
+ new Socket.SocketCloseError({
108
+ reason: "Close",
109
+ code: hadError ? 1006 : 1000
110
+ })
112
111
  )
113
- }
114
- yield* Scope.addFinalizer(
115
- scope,
116
- Effect.sync(() => {
117
- conn.off("data", onData)
118
- conn.off("end", onEnd)
119
- conn.off("error", onError)
120
- conn.off("close", onClose)
121
- })
122
112
  )
123
- conn.on("data", onData)
124
- conn.on("end", onEnd)
125
- conn.on("error", onError)
126
- conn.on("close", onClose)
113
+ }
114
+ yield* Scope.addFinalizer(
115
+ scope,
116
+ Effect.sync(() => {
117
+ conn.off("data", onData)
118
+ conn.off("end", onEnd)
119
+ conn.off("error", onError)
120
+ conn.off("close", onClose)
121
+ })
122
+ )
123
+ conn.on("data", onData)
124
+ conn.on("end", onEnd)
125
+ conn.on("error", onError)
126
+ conn.on("close", onClose)
127
127
 
128
- currentSocket = conn
129
- yield* latch.open
128
+ currentSocket = conn
129
+ yield* latch.open
130
130
 
131
- return yield* FiberSet.join(fiberSet)
132
- })
133
- ).pipe(
131
+ return yield* FiberSet.join(fiberSet)
132
+ })).pipe(
134
133
  Effect.mapInputContext((input: Context.Context<R>) => Context.merge(openContext, input)),
135
134
  Effect.ensuring(Effect.sync(() => {
136
135
  latch.unsafeClose()