@effect/platform-node-shared 4.0.0-beta.7 → 4.0.0-beta.71
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/dist/NodeChildProcessSpawner.d.ts +18 -4
- package/dist/NodeChildProcessSpawner.d.ts.map +1 -1
- package/dist/NodeChildProcessSpawner.js +76 -17
- package/dist/NodeChildProcessSpawner.js.map +1 -1
- package/dist/NodeClusterSocket.d.ts +10 -4
- package/dist/NodeClusterSocket.d.ts.map +1 -1
- package/dist/NodeClusterSocket.js +46 -8
- package/dist/NodeClusterSocket.js.map +1 -1
- package/dist/NodeCrypto.d.ts +42 -0
- package/dist/NodeCrypto.d.ts.map +1 -0
- package/dist/NodeCrypto.js +70 -0
- package/dist/NodeCrypto.js.map +1 -0
- package/dist/NodeFileSystem.d.ts +5 -2
- package/dist/NodeFileSystem.d.ts.map +1 -1
- package/dist/NodeFileSystem.js +56 -26
- package/dist/NodeFileSystem.js.map +1 -1
- package/dist/NodePath.d.ts +15 -6
- package/dist/NodePath.d.ts.map +1 -1
- package/dist/NodePath.js +39 -7
- package/dist/NodePath.js.map +1 -1
- package/dist/NodeRuntime.d.ts +48 -7
- package/dist/NodeRuntime.d.ts.map +1 -1
- package/dist/NodeRuntime.js +8 -8
- package/dist/NodeRuntime.js.map +1 -1
- package/dist/NodeSink.d.ts +49 -4
- package/dist/NodeSink.d.ts.map +1 -1
- package/dist/NodeSink.js +23 -4
- package/dist/NodeSink.js.map +1 -1
- package/dist/NodeSocket.d.ts +50 -9
- package/dist/NodeSocket.d.ts.map +1 -1
- package/dist/NodeSocket.js +31 -15
- package/dist/NodeSocket.js.map +1 -1
- package/dist/NodeSocketServer.d.ts +24 -7
- package/dist/NodeSocketServer.d.ts.map +1 -1
- package/dist/NodeSocketServer.js +28 -11
- package/dist/NodeSocketServer.js.map +1 -1
- package/dist/NodeStdio.d.ts +6 -5
- package/dist/NodeStdio.d.ts.map +1 -1
- package/dist/NodeStdio.js +46 -7
- package/dist/NodeStdio.js.map +1 -1
- package/dist/NodeStream.d.ts +93 -20
- package/dist/NodeStream.d.ts.map +1 -1
- package/dist/NodeStream.js +85 -23
- package/dist/NodeStream.js.map +1 -1
- package/dist/NodeTerminal.d.ts +9 -2
- package/dist/NodeTerminal.d.ts.map +1 -1
- package/dist/NodeTerminal.js +13 -3
- package/dist/NodeTerminal.js.map +1 -1
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/package.json +7 -6
- package/src/NodeChildProcessSpawner.ts +116 -28
- package/src/NodeClusterSocket.ts +46 -8
- package/src/NodeCrypto.ts +75 -0
- package/src/NodeFileSystem.ts +63 -28
- package/src/NodePath.ts +39 -7
- package/src/NodeRuntime.ts +50 -13
- package/src/NodeSink.ts +56 -4
- package/src/NodeSocket.ts +56 -16
- package/src/NodeSocketServer.ts +64 -12
- package/src/NodeStdio.ts +64 -23
- package/src/NodeStream.ts +106 -30
- package/src/NodeTerminal.ts +44 -4
- package/src/index.ts +65 -0
package/dist/NodeSink.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeSink.js","names":["Cause","Channel","Effect","identity","Pull","Sink","fromWritable","options","fromChannel","mapDone","fromWritableChannel","_","fromTransform","pull","writable","evaluate","succeed","pullIntoWritable","pipe","flatMap","chunk","i","callback","loop","resume","length","success","write","encoding","once","void","forever","disableYield","endOnDone","catchDone","closed","done","end"],"sources":["../src/NodeSink.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeSink.js","names":["Cause","Channel","Effect","identity","Pull","Sink","fromWritable","options","fromChannel","mapDone","fromWritableChannel","_","fromTransform","pull","writable","evaluate","succeed","pullIntoWritable","pipe","flatMap","chunk","i","callback","loop","resume","length","success","write","encoding","once","void","forever","disableYield","raceFirst","onError","error","fail","sync","off","endOnDone","catchDone","closed","done","end"],"sources":["../src/NodeSink.ts"],"sourcesContent":[null],"mappings":"AAoCA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,OAAO,MAAM,gBAAgB;AACzC,OAAO,KAAKC,MAAM,MAAM,eAAe;AACvC,SAASC,QAAQ,QAAsB,iBAAiB;AACxD,OAAO,KAAKC,IAAI,MAAM,aAAa;AACnC,OAAO,KAAKC,IAAI,MAAM,aAAa;AAGnC;;;;;;;;AAQA,OAAO,MAAMC,YAAY,GACvBC,OAKC,IAEDF,IAAI,CAACG,WAAW,CAACP,OAAO,CAACQ,OAAO,CAACC,mBAAmB,CAAcH,OAAO,CAAC,EAAGI,CAAC,IAAK,CAACA,CAAC,CAAC,CAAC,CAAC;AAE1F;;;;;;;;AAQA,OAAO,MAAMD,mBAAmB,GAC9BH,OAKC,IAEDN,OAAO,CAACW,aAAa,CAAEC,IAAsD,IAAI;EAC/E,MAAMC,QAAQ,GAAGP,OAAO,CAACQ,QAAQ,EAAc;EAC/C,OAAOb,MAAM,CAACc,OAAO,CAACC,gBAAgB,CAAC;IAAE,GAAGV,OAAO;IAAEO,QAAQ;IAAED;EAAI,CAAE,CAAC,CAAC;AACzE,CAAC,CAAC;AAEJ;;;;;;;;AAQA,OAAO,MAAMI,gBAAgB,GAAcV,OAM1C,IACCA,OAAO,CAACM,IAAI,CAACK,IAAI,CACfhB,MAAM,CAACiB,OAAO,CAAEC,KAAK,IAAI;EACvB,IAAIC,CAAC,GAAG,CAAC;EACT,OAAOnB,MAAM,CAACoB,QAAQ,CAAU,SAASC,IAAIA,CAACC,MAAM;IAClD,OAAOH,CAAC,GAAGD,KAAK,CAACK,MAAM,GAAG;MACxB,MAAMC,OAAO,GAAGnB,OAAO,CAACO,QAAQ,CAACa,KAAK,CAACP,KAAK,CAACC,CAAC,EAAE,CAAC,EAAEd,OAAO,CAACqB,QAAe,CAAC;MAC3E,IAAI,CAACF,OAAO,EAAE;QACZnB,OAAO,CAACO,QAAQ,CAACe,IAAI,CAAC,OAAO,EAAE,MAAON,IAAY,CAACC,MAAM,CAAC,CAAC;QAC3D;MACF;IACF;IACAA,MAAM,CAACtB,MAAM,CAAC4B,IAAI,CAAC;EACrB,CAAC,CAAC;AACJ,CAAC,CAAC,EACF5B,MAAM,CAAC6B,OAAO,CAAC;EAAEC,YAAY,EAAE;AAAI,CAAE,CAAC,EACtC9B,MAAM,CAAC+B,SAAS,CAAC/B,MAAM,CAACoB,QAAQ,CAAYE,MAAM,IAAI;EACpD,MAAMU,OAAO,GAAIC,KAAc,IAAKX,MAAM,CAACtB,MAAM,CAACkC,IAAI,CAAC7B,OAAO,CAAC2B,OAAO,CAACC,KAAK,CAAC,CAAC,CAAC;EAC/E5B,OAAO,CAACO,QAAQ,CAACe,IAAI,CAAC,OAAO,EAAEK,OAAO,CAAC;EACvC,OAAOhC,MAAM,CAACmC,IAAI,CAAC,MAAK;IACtB9B,OAAO,CAACO,QAAQ,CAACwB,GAAG,CAAC,OAAO,EAAEJ,OAAO,CAAC;EACxC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC,EACH3B,OAAO,CAACgC,SAAS,KAAK,KAAK,GACzBnC,IAAI,CAACoC,SAAS,CAAE7B,CAAC,IAAI;EACnB,IAAI,QAAQ,IAAIJ,OAAO,CAACO,QAAQ,IAAIP,OAAO,CAACO,QAAQ,CAAC2B,MAAM,EAAE;IAC3D,OAAOzC,KAAK,CAAC0C,IAAI,CAAC/B,CAAC,CAAC;EACtB;EACA,OAAOT,MAAM,CAACoB,QAAQ,CAAkCE,MAAM,IAAI;IAChEjB,OAAO,CAACO,QAAQ,CAACe,IAAI,CAAC,QAAQ,EAAE,MAAML,MAAM,CAACxB,KAAK,CAAC0C,IAAI,CAAC/B,CAAC,CAAC,CAAC,CAAC;IAC5DJ,OAAO,CAACO,QAAQ,CAAC6B,GAAG,EAAE;EACxB,CAAC,CAAC;AACJ,CAAC,CAAC,GACFxC,QAAQ,CACX","ignoreList":[]}
|
package/dist/NodeSocket.d.ts
CHANGED
|
@@ -1,50 +1,91 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Node socket adapters for Effect sockets.
|
|
3
|
+
*
|
|
4
|
+
* This module opens `node:net` connections or wraps existing Node `Duplex`
|
|
5
|
+
* streams and presents them as `Socket.Socket` values, socket channels, or
|
|
6
|
+
* layers. It is the low-level bridge for TCP clients, Unix domain socket
|
|
7
|
+
* clients, and protocols that already expose a Node duplex stream.
|
|
8
|
+
*
|
|
9
|
+
* **Mental model**
|
|
10
|
+
*
|
|
11
|
+
* A socket acquired here is scoped. `makeNet` dials with
|
|
12
|
+
* `net.createConnection`, `fromDuplex` adapts any duplex returned by an Effect,
|
|
13
|
+
* `makeNetChannel` exposes the socket as a `Channel`, and `layerNet` provides
|
|
14
|
+
* it through the Effect environment. While a socket handler is running,
|
|
15
|
+
* `NetSocket` gives access to the underlying Node `net.Socket` for cases that
|
|
16
|
+
* need Node-specific operations.
|
|
17
|
+
*
|
|
18
|
+
* **Gotchas**
|
|
19
|
+
*
|
|
20
|
+
* `openTimeout` only limits opening the connection. Writes complete when Node
|
|
21
|
+
* accepts or flushes a chunk, close events are translated to `SocketError`
|
|
22
|
+
* values, and finalizers close or destroy the stream when the surrounding scope
|
|
23
|
+
* ends. Unix socket paths are supplied through `NetConnectOpts.path`, so use
|
|
24
|
+
* the same platform path rules as Node.
|
|
25
|
+
*
|
|
26
|
+
* @since 4.0.0
|
|
3
27
|
*/
|
|
4
28
|
import type { Array } from "effect";
|
|
5
29
|
import * as Channel from "effect/Channel";
|
|
30
|
+
import * as Context from "effect/Context";
|
|
6
31
|
import type * as Duration from "effect/Duration";
|
|
7
32
|
import * as Effect from "effect/Effect";
|
|
8
33
|
import * as Layer from "effect/Layer";
|
|
9
34
|
import * as Scope from "effect/Scope";
|
|
10
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
11
35
|
import * as Socket from "effect/unstable/socket/Socket";
|
|
12
36
|
import * as Net from "node:net";
|
|
13
37
|
import type { Duplex } from "node:stream";
|
|
14
38
|
/**
|
|
15
|
-
* @since 1.0.0
|
|
16
39
|
* @category re-exports
|
|
40
|
+
* @since 4.0.0
|
|
17
41
|
*/
|
|
18
42
|
export * as NodeWS from "ws";
|
|
19
|
-
declare const NetSocket_base:
|
|
43
|
+
declare const NetSocket_base: Context.ServiceClass<NetSocket, "@effect/platform-node/NodeSocket/NetSocket", Net.Socket>;
|
|
20
44
|
/**
|
|
21
|
-
*
|
|
45
|
+
* Service tag for the underlying Node `net.Socket` associated with the current
|
|
46
|
+
* socket connection.
|
|
47
|
+
*
|
|
22
48
|
* @category tags
|
|
49
|
+
* @since 4.0.0
|
|
23
50
|
*/
|
|
24
51
|
export declare class NetSocket extends NetSocket_base {
|
|
25
52
|
}
|
|
26
53
|
/**
|
|
27
|
-
*
|
|
54
|
+
* Opens a TCP connection with Node `net.createConnection` and exposes it as a
|
|
55
|
+
* `Socket.Socket`, supporting `openTimeout` and closing or destroying the
|
|
56
|
+
* socket when the enclosing scope is finalized.
|
|
57
|
+
*
|
|
28
58
|
* @category constructors
|
|
59
|
+
* @since 4.0.0
|
|
29
60
|
*/
|
|
30
61
|
export declare const makeNet: (options: Net.NetConnectOpts & {
|
|
31
62
|
readonly openTimeout?: Duration.Input | undefined;
|
|
32
63
|
}) => Effect.Effect<Socket.Socket>;
|
|
33
64
|
/**
|
|
34
|
-
*
|
|
65
|
+
* Adapts a Node `Duplex` into a `Socket.Socket`, wiring data events to socket
|
|
66
|
+
* handlers, providing a scoped writer, and mapping open, read, write, and close
|
|
67
|
+
* failures to `SocketError`.
|
|
68
|
+
*
|
|
35
69
|
* @category constructors
|
|
70
|
+
* @since 4.0.0
|
|
36
71
|
*/
|
|
37
72
|
export declare const fromDuplex: <RO>(open: Effect.Effect<Duplex, Socket.SocketError, RO>, options?: {
|
|
38
73
|
readonly openTimeout?: Duration.Input | undefined;
|
|
39
74
|
}) => Effect.Effect<Socket.Socket, never, Exclude<RO, Scope.Scope>>;
|
|
40
75
|
/**
|
|
41
|
-
*
|
|
76
|
+
* Creates a `Channel` over a TCP socket, reading arrays of `Uint8Array`
|
|
77
|
+
* chunks and writing arrays of bytes, strings, or socket close events.
|
|
78
|
+
*
|
|
42
79
|
* @category constructors
|
|
80
|
+
* @since 4.0.0
|
|
43
81
|
*/
|
|
44
82
|
export declare const makeNetChannel: <IE = never>(options: Net.NetConnectOpts) => Channel.Channel<Array.NonEmptyReadonlyArray<Uint8Array>, Socket.SocketError | IE, void, Array.NonEmptyReadonlyArray<Uint8Array | string | Socket.CloseEvent>, IE>;
|
|
45
83
|
/**
|
|
46
|
-
*
|
|
84
|
+
* Provides a `Socket.Socket` by opening a TCP connection with the supplied
|
|
85
|
+
* Node `net` connection options.
|
|
86
|
+
*
|
|
47
87
|
* @category layers
|
|
88
|
+
* @since 4.0.0
|
|
48
89
|
*/
|
|
49
90
|
export declare const layerNet: (options: Net.NetConnectOpts) => Layer.Layer<Socket.Socket, Socket.SocketError>;
|
|
50
91
|
//# sourceMappingURL=NodeSocket.d.ts.map
|
package/dist/NodeSocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeSocket.d.ts","sourceRoot":"","sources":["../src/NodeSocket.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"NodeSocket.d.ts","sourceRoot":"","sources":["../src/NodeSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAKvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AACvD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC;;;GAGG;AACH,OAAO,KAAK,MAAM,MAAM,IAAI,CAAA;;AAE5B;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,cAE9B;CAAG;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAClB,SAAS,GAAG,CAAC,cAAc,GAAG;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;CAClD,KACA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAmC3B,CAAA;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GAAI,EAAE,EAC3B,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EACnD,UAAU;IACR,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;CAClD,KACA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CA4H3D,CAAA;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,EAAE,GAAG,KAAK,EACvC,SAAS,GAAG,CAAC,cAAc,KAC1B,OAAO,CAAC,OAAO,CAChB,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,EACvC,MAAM,CAAC,WAAW,GAAG,EAAE,EACvB,IAAI,EACJ,KAAK,CAAC,qBAAqB,CAAC,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,EACpE,EAAE,CAID,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,KAAK,KAAK,CAAC,KAAK,CACjE,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,WAAW,CACmC,CAAA"}
|
package/dist/NodeSocket.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as Channel from "effect/Channel";
|
|
2
|
+
import * as Context from "effect/Context";
|
|
2
3
|
import * as Deferred from "effect/Deferred";
|
|
3
4
|
import * as Effect from "effect/Effect";
|
|
4
5
|
import * as FiberSet from "effect/FiberSet";
|
|
@@ -7,26 +8,32 @@ import { identity } from "effect/Function";
|
|
|
7
8
|
import * as Latch from "effect/Latch";
|
|
8
9
|
import * as Layer from "effect/Layer";
|
|
9
10
|
import * as Scope from "effect/Scope";
|
|
10
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
11
11
|
import * as Socket from "effect/unstable/socket/Socket";
|
|
12
12
|
import * as Net from "node:net";
|
|
13
13
|
/**
|
|
14
|
-
* @since 1.0.0
|
|
15
14
|
* @category re-exports
|
|
15
|
+
* @since 4.0.0
|
|
16
16
|
*/
|
|
17
17
|
export * as NodeWS from "ws";
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* Service tag for the underlying Node `net.Socket` associated with the current
|
|
20
|
+
* socket connection.
|
|
21
|
+
*
|
|
20
22
|
* @category tags
|
|
23
|
+
* @since 4.0.0
|
|
21
24
|
*/
|
|
22
|
-
export class NetSocket extends /*#__PURE__*/
|
|
25
|
+
export class NetSocket extends /*#__PURE__*/Context.Service()("@effect/platform-node/NodeSocket/NetSocket") {}
|
|
23
26
|
/**
|
|
24
|
-
*
|
|
27
|
+
* Opens a TCP connection with Node `net.createConnection` and exposes it as a
|
|
28
|
+
* `Socket.Socket`, supporting `openTimeout` and closing or destroying the
|
|
29
|
+
* socket when the enclosing scope is finalized.
|
|
30
|
+
*
|
|
25
31
|
* @category constructors
|
|
32
|
+
* @since 4.0.0
|
|
26
33
|
*/
|
|
27
|
-
export const makeNet = options => fromDuplex(Effect.
|
|
34
|
+
export const makeNet = options => fromDuplex(Effect.contextWith(context => {
|
|
28
35
|
let conn;
|
|
29
|
-
return Effect.flatMap(Scope.addFinalizer(
|
|
36
|
+
return Effect.flatMap(Scope.addFinalizer(Context.get(context, Scope.Scope), Effect.sync(() => {
|
|
30
37
|
if (!conn) return;
|
|
31
38
|
if (conn.closed === false) {
|
|
32
39
|
if ("destroySoon" in conn) {
|
|
@@ -52,13 +59,17 @@ export const makeNet = options => fromDuplex(Effect.servicesWith(services => {
|
|
|
52
59
|
}));
|
|
53
60
|
}), options);
|
|
54
61
|
/**
|
|
55
|
-
*
|
|
62
|
+
* Adapts a Node `Duplex` into a `Socket.Socket`, wiring data events to socket
|
|
63
|
+
* handlers, providing a scoped writer, and mapping open, read, write, and close
|
|
64
|
+
* failures to `SocketError`.
|
|
65
|
+
*
|
|
56
66
|
* @category constructors
|
|
67
|
+
* @since 4.0.0
|
|
57
68
|
*/
|
|
58
69
|
export const fromDuplex = (open, options) => Effect.withFiber(fiber => {
|
|
59
70
|
let currentSocket;
|
|
60
71
|
const latch = Latch.makeUnsafe(false);
|
|
61
|
-
const openServices = fiber.
|
|
72
|
+
const openServices = fiber.context;
|
|
62
73
|
const run = (handler, opts) => Effect.scopedWith(Effect.fnUntraced(function* (scope) {
|
|
63
74
|
const fiberSet = yield* FiberSet.make().pipe(Scope.provide(scope));
|
|
64
75
|
let conn = undefined;
|
|
@@ -71,7 +82,7 @@ export const fromDuplex = (open, options) => Effect.withFiber(fiber => {
|
|
|
71
82
|
}));
|
|
72
83
|
conn = yield* Scope.provide(open, scope).pipe(options?.openTimeout ? Effect.timeoutOrElse({
|
|
73
84
|
duration: options.openTimeout,
|
|
74
|
-
|
|
85
|
+
orElse: () => Effect.fail(new Socket.SocketError({
|
|
75
86
|
reason: new Socket.SocketOpenError({
|
|
76
87
|
kind: "Timeout",
|
|
77
88
|
cause: new Error("Connection timed out")
|
|
@@ -112,7 +123,7 @@ export const fromDuplex = (open, options) => Effect.withFiber(fiber => {
|
|
|
112
123
|
})
|
|
113
124
|
})));
|
|
114
125
|
}
|
|
115
|
-
})).pipe(Effect.
|
|
126
|
+
})).pipe(Effect.updateContext(input => Context.merge(openServices, input)), Effect.onExit(() => Effect.sync(() => {
|
|
116
127
|
latch.closeUnsafe();
|
|
117
128
|
currentSocket = undefined;
|
|
118
129
|
})));
|
|
@@ -134,21 +145,26 @@ export const fromDuplex = (open, options) => Effect.withFiber(fiber => {
|
|
|
134
145
|
if (!currentSocket || currentSocket.writableEnded) return;
|
|
135
146
|
currentSocket.end();
|
|
136
147
|
}));
|
|
137
|
-
return Effect.succeed(Socket.
|
|
138
|
-
[Socket.TypeId]: Socket.TypeId,
|
|
148
|
+
return Effect.succeed(Socket.make({
|
|
139
149
|
run,
|
|
140
150
|
runRaw: run,
|
|
141
151
|
writer
|
|
142
152
|
}));
|
|
143
153
|
});
|
|
144
154
|
/**
|
|
145
|
-
*
|
|
155
|
+
* Creates a `Channel` over a TCP socket, reading arrays of `Uint8Array`
|
|
156
|
+
* chunks and writing arrays of bytes, strings, or socket close events.
|
|
157
|
+
*
|
|
146
158
|
* @category constructors
|
|
159
|
+
* @since 4.0.0
|
|
147
160
|
*/
|
|
148
161
|
export const makeNetChannel = options => Channel.unwrap(Effect.map(makeNet(options), Socket.toChannelWith()));
|
|
149
162
|
/**
|
|
150
|
-
*
|
|
163
|
+
* Provides a `Socket.Socket` by opening a TCP connection with the supplied
|
|
164
|
+
* Node `net` connection options.
|
|
165
|
+
*
|
|
151
166
|
* @category layers
|
|
167
|
+
* @since 4.0.0
|
|
152
168
|
*/
|
|
153
169
|
export const layerNet = /*#__PURE__*/Function.flow(makeNet, /*#__PURE__*/Layer.effect(Socket.Socket));
|
|
154
170
|
//# sourceMappingURL=NodeSocket.js.map
|
package/dist/NodeSocket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeSocket.js","names":["Channel","Deferred","Effect","FiberSet","Function","identity","Latch","Layer","Scope","
|
|
1
|
+
{"version":3,"file":"NodeSocket.js","names":["Channel","Context","Deferred","Effect","FiberSet","Function","identity","Latch","Layer","Scope","Socket","Net","NodeWS","NetSocket","Service","makeNet","options","fromDuplex","contextWith","context","conn","flatMap","addFinalizer","get","sync","closed","destroySoon","destroy","callback","resume","createConnection","once","succeed","on","cause","fail","SocketError","reason","SocketOpenError","kind","open","withFiber","fiber","currentSocket","latch","makeUnsafe","openServices","run","handler","opts","scopedWith","fnUntraced","scope","fiberSet","make","pipe","provide","undefined","off","onData","onEnd","onError","onClose","openTimeout","timeoutOrElse","duration","orElse","Error","provideService","runtime","openUnsafe","onOpen","join","chunk","result","isEffect","doneUnsafe","deferred","void","SocketReadError","hadError","SocketCloseError","code","updateContext","input","merge","onExit","closeUnsafe","write","whenOpen","isCloseEvent","SocketWriteError","writer","acquireRelease","writableEnded","end","runRaw","makeNetChannel","unwrap","map","toChannelWith","layerNet","flow","effect"],"sources":["../src/NodeSocket.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,41 +1,58 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
1
2
|
import * as Effect from "effect/Effect";
|
|
2
3
|
import * as Layer from "effect/Layer";
|
|
3
4
|
import * as Scope from "effect/Scope";
|
|
4
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
5
5
|
import * as Socket from "effect/unstable/socket/Socket";
|
|
6
6
|
import * as SocketServer from "effect/unstable/socket/SocketServer";
|
|
7
7
|
import type * as Http from "node:http";
|
|
8
8
|
import * as Net from "node:net";
|
|
9
9
|
import * as NodeSocket from "./NodeSocket.ts";
|
|
10
10
|
import { NodeWS } from "./NodeSocket.ts";
|
|
11
|
-
declare const IncomingMessage_base:
|
|
11
|
+
declare const IncomingMessage_base: Context.ServiceClass<IncomingMessage, "@effect/platform-node-shared/NodeSocketServer/IncomingMessage", Http.IncomingMessage>;
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Service tag for the Node `IncomingMessage` associated with the current
|
|
14
|
+
* WebSocket server connection.
|
|
15
|
+
*
|
|
14
16
|
* @category tags
|
|
17
|
+
* @since 4.0.0
|
|
15
18
|
*/
|
|
16
19
|
export declare class IncomingMessage extends IncomingMessage_base {
|
|
17
20
|
}
|
|
18
21
|
/**
|
|
19
|
-
*
|
|
22
|
+
* Creates a scoped TCP `SocketServer` from a Node `net.Server`, starts
|
|
23
|
+
* listening with the supplied options, queues pending connections until `run`
|
|
24
|
+
* is called, and closes the server when the scope ends.
|
|
25
|
+
*
|
|
20
26
|
* @category constructors
|
|
27
|
+
* @since 4.0.0
|
|
21
28
|
*/
|
|
22
29
|
export declare const make: (options: Net.ServerOpts & Net.ListenOptions) => Effect.Effect<{
|
|
23
30
|
readonly address: SocketServer.Address;
|
|
24
31
|
readonly run: <R, E, _>(handler: (socket: Socket.Socket) => Effect.Effect<_, E, R>) => Effect.Effect<never, SocketServer.SocketServerError, R>;
|
|
25
32
|
}, SocketServer.SocketServerError, Scope.Scope>;
|
|
26
33
|
/**
|
|
27
|
-
*
|
|
34
|
+
* Provides a TCP `SocketServer` by creating and managing a scoped Node
|
|
35
|
+
* `net.Server` with the supplied server and listen options.
|
|
36
|
+
*
|
|
28
37
|
* @category layers
|
|
38
|
+
* @since 4.0.0
|
|
29
39
|
*/
|
|
30
40
|
export declare const layer: (options: Net.ServerOpts & Net.ListenOptions) => Layer.Layer<SocketServer.SocketServer, SocketServer.SocketServerError>;
|
|
31
41
|
/**
|
|
32
|
-
*
|
|
42
|
+
* Creates a scoped WebSocket `SocketServer` backed by the `ws` package,
|
|
43
|
+
* providing the WebSocket and its Node `IncomingMessage` to connection
|
|
44
|
+
* handlers and closing the server when the scope ends.
|
|
45
|
+
*
|
|
33
46
|
* @category constructors
|
|
47
|
+
* @since 4.0.0
|
|
34
48
|
*/
|
|
35
49
|
export declare const makeWebSocket: (options: NodeWS.ServerOptions<typeof NodeWS.WebSocket, typeof Http.IncomingMessage>) => Effect.Effect<SocketServer.SocketServer["Service"], SocketServer.SocketServerError, Scope.Scope>;
|
|
36
50
|
/**
|
|
37
|
-
*
|
|
51
|
+
* Provides a WebSocket `SocketServer` backed by the `ws` package and managed
|
|
52
|
+
* with the supplied server options.
|
|
53
|
+
*
|
|
38
54
|
* @category layers
|
|
55
|
+
* @since 4.0.0
|
|
39
56
|
*/
|
|
40
57
|
export declare const layerWebSocket: (options: NodeSocket.NodeWS.ServerOptions<typeof NodeSocket.NodeWS.WebSocket, typeof Http.IncomingMessage>) => Layer.Layer<SocketServer.SocketServer, SocketServer.SocketServerError>;
|
|
41
58
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeSocketServer.d.ts","sourceRoot":"","sources":["../src/NodeSocketServer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeSocketServer.d.ts","sourceRoot":"","sources":["../src/NodeSocketServer.ts"],"names":[],"mappings":"AAuCA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAKvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AACvD,OAAO,KAAK,YAAY,MAAM,qCAAqC,CAAA;AACnE,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;;AAExC;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,oBAG+B;CAAG;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI;;;+CA6Gf,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,EAAE,CAClB,OAAO,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,KACxC,KAAK,CAAC,KAAK,CACd,YAAY,CAAC,YAAY,EACzB,YAAY,CAAC,iBAAiB,CACgC,CAAA;AAEhE;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,CAC1B,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,OAAO,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,KAChF,MAAM,CAAC,MAAM,CAChB,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,EACpC,YAAY,CAAC,iBAAiB,EAC9B,KAAK,CAAC,KAAK,CAyFX,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,CAC3B,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,IAAI,CAAC,eAAe,CAAC,KACtG,KAAK,CAAC,KAAK,CACd,YAAY,CAAC,YAAY,EACzB,YAAY,CAAC,iBAAiB,CACyC,CAAA"}
|
package/dist/NodeSocketServer.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
1
2
|
import * as Deferred from "effect/Deferred";
|
|
2
3
|
import * as Effect from "effect/Effect";
|
|
3
4
|
import * as Exit from "effect/Exit";
|
|
@@ -7,20 +8,26 @@ import * as Function from "effect/Function";
|
|
|
7
8
|
import * as Layer from "effect/Layer";
|
|
8
9
|
import * as References from "effect/References";
|
|
9
10
|
import * as Scope from "effect/Scope";
|
|
10
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
11
11
|
import * as Socket from "effect/unstable/socket/Socket";
|
|
12
12
|
import * as SocketServer from "effect/unstable/socket/SocketServer";
|
|
13
13
|
import * as Net from "node:net";
|
|
14
14
|
import * as NodeSocket from "./NodeSocket.js";
|
|
15
15
|
import { NodeWS } from "./NodeSocket.js";
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
17
|
+
* Service tag for the Node `IncomingMessage` associated with the current
|
|
18
|
+
* WebSocket server connection.
|
|
19
|
+
*
|
|
18
20
|
* @category tags
|
|
21
|
+
* @since 4.0.0
|
|
19
22
|
*/
|
|
20
|
-
export class IncomingMessage extends /*#__PURE__*/
|
|
23
|
+
export class IncomingMessage extends /*#__PURE__*/Context.Service()("@effect/platform-node-shared/NodeSocketServer/IncomingMessage") {}
|
|
21
24
|
/**
|
|
22
|
-
*
|
|
25
|
+
* Creates a scoped TCP `SocketServer` from a Node `net.Server`, starts
|
|
26
|
+
* listening with the supplied options, queues pending connections until `run`
|
|
27
|
+
* is called, and closes the server when the scope ends.
|
|
28
|
+
*
|
|
23
29
|
* @category constructors
|
|
30
|
+
* @since 4.0.0
|
|
24
31
|
*/
|
|
25
32
|
export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
26
33
|
const errorDeferred = Deferred.makeUnsafe();
|
|
@@ -50,7 +57,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
|
50
57
|
}))));
|
|
51
58
|
const run = Effect.fnUntraced(function* (handler) {
|
|
52
59
|
const scope = yield* Scope.make();
|
|
53
|
-
const services =
|
|
60
|
+
const services = Context.omit(Scope.Scope)(yield* Effect.context());
|
|
54
61
|
const trackFiber = Fiber.runIn(scope);
|
|
55
62
|
const prevOnConnection = onConnection;
|
|
56
63
|
onConnection = function (conn) {
|
|
@@ -78,7 +85,7 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
|
78
85
|
if (conn.closed === false) {
|
|
79
86
|
conn.destroySoon();
|
|
80
87
|
}
|
|
81
|
-
}))), Effect.flatMap(handler), Effect.catchCause(reportUnhandledError), Effect.runForkWith(
|
|
88
|
+
}))), Effect.flatMap(handler), Effect.catchCause(reportUnhandledError), Effect.runForkWith(Context.add(services, NodeSocket.NetSocket, conn)), trackFiber);
|
|
82
89
|
};
|
|
83
90
|
pending.forEach(conn => {
|
|
84
91
|
conn.removeAllListeners("error");
|
|
@@ -107,13 +114,20 @@ export const make = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
|
107
114
|
});
|
|
108
115
|
});
|
|
109
116
|
/**
|
|
110
|
-
*
|
|
117
|
+
* Provides a TCP `SocketServer` by creating and managing a scoped Node
|
|
118
|
+
* `net.Server` with the supplied server and listen options.
|
|
119
|
+
*
|
|
111
120
|
* @category layers
|
|
121
|
+
* @since 4.0.0
|
|
112
122
|
*/
|
|
113
123
|
export const layer = /*#__PURE__*/Function.flow(make, /*#__PURE__*/Layer.effect(SocketServer.SocketServer));
|
|
114
124
|
/**
|
|
115
|
-
*
|
|
125
|
+
* Creates a scoped WebSocket `SocketServer` backed by the `ws` package,
|
|
126
|
+
* providing the WebSocket and its Node `IncomingMessage` to connection
|
|
127
|
+
* handlers and closing the server when the scope ends.
|
|
128
|
+
*
|
|
116
129
|
* @category constructors
|
|
130
|
+
* @since 4.0.0
|
|
117
131
|
*/
|
|
118
132
|
export const makeWebSocket = /*#__PURE__*/Effect.fnUntraced(function* (options) {
|
|
119
133
|
const server = yield* Effect.acquireRelease(Effect.sync(() => new NodeWS.WebSocketServer(options)), server => Effect.callback(resume => {
|
|
@@ -143,7 +157,7 @@ export const makeWebSocket = /*#__PURE__*/Effect.fnUntraced(function* (options)
|
|
|
143
157
|
});
|
|
144
158
|
const run = Effect.fnUntraced(function* (handler) {
|
|
145
159
|
const scope = yield* Scope.make();
|
|
146
|
-
const services =
|
|
160
|
+
const services = Context.omit(Scope.Scope)(yield* Effect.context());
|
|
147
161
|
const trackFiber = Fiber.runIn(scope);
|
|
148
162
|
const prevOnConnection = onConnection;
|
|
149
163
|
onConnection = function (conn, req) {
|
|
@@ -152,7 +166,7 @@ export const makeWebSocket = /*#__PURE__*/Effect.fnUntraced(function* (options)
|
|
|
152
166
|
map.set(Socket.WebSocket.key, conn);
|
|
153
167
|
pipe(Socket.fromWebSocket(Effect.acquireRelease(Effect.succeed(conn), conn => Effect.sync(() => {
|
|
154
168
|
conn.close();
|
|
155
|
-
}))), Effect.flatMap(handler), Effect.catchCause(reportUnhandledError), Effect.runForkWith(
|
|
169
|
+
}))), Effect.flatMap(handler), Effect.catchCause(reportUnhandledError), Effect.runForkWith(Context.makeUnsafe(map)), trackFiber);
|
|
156
170
|
};
|
|
157
171
|
for (const [conn, req] of pendingConnections) {
|
|
158
172
|
onConnection(conn, req);
|
|
@@ -178,8 +192,11 @@ export const makeWebSocket = /*#__PURE__*/Effect.fnUntraced(function* (options)
|
|
|
178
192
|
});
|
|
179
193
|
});
|
|
180
194
|
/**
|
|
181
|
-
*
|
|
195
|
+
* Provides a WebSocket `SocketServer` backed by the `ws` package and managed
|
|
196
|
+
* with the supplied server options.
|
|
197
|
+
*
|
|
182
198
|
* @category layers
|
|
199
|
+
* @since 4.0.0
|
|
183
200
|
*/
|
|
184
201
|
export const layerWebSocket = /*#__PURE__*/Function.flow(makeWebSocket, /*#__PURE__*/Layer.effect(SocketServer.SocketServer));
|
|
185
202
|
const reportUnhandledError = cause => Effect.withFiber(fiber => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeSocketServer.js","names":["Deferred","Effect","Exit","Fiber","pipe","Function","Layer","References","Scope","
|
|
1
|
+
{"version":3,"file":"NodeSocketServer.js","names":["Context","Deferred","Effect","Exit","Fiber","pipe","Function","Layer","References","Scope","Socket","SocketServer","Net","NodeSocket","NodeWS","IncomingMessage","Service","make","fnUntraced","options","errorDeferred","makeUnsafe","pending","Set","defaultOnConnection","conn","add","remove","delete","on","onConnection","server","addFinalizer","callback","resume","close","void","createServer","err","doneUnsafe","fail","listen","raceFirst","mapError","await","SocketServerError","reason","SocketServerOpenError","cause","run","handler","scope","services","omit","context","trackFiber","runIn","prevOnConnection","error","fromDuplex","acquireRelease","suspend","SocketError","SocketOpenError","kind","closed","SocketCloseError","code","succeed","sync","destroySoon","flatMap","catchCause","reportUnhandledError","runForkWith","NetSocket","forEach","removeAllListeners","clear","_resume","address","of","_tag","path","hostname","port","layer","flow","effect","makeWebSocket","WebSocketServer","pendingConnections","defaultHandler","req","entry","addEventListener","once","map","Map","mapUnsafe","set","key","WebSocket","fromWebSocket","ensuring","layerWebSocket","withFiber","fiber","unhandledLogLevel","getRef","UnhandledLogLevel","logWithLevel"],"sources":["../src/NodeSocketServer.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/NodeStdio.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @since 1.0.0
|
|
3
|
-
*/
|
|
4
1
|
import * as Layer from "effect/Layer";
|
|
5
2
|
import * as Stdio from "effect/Stdio";
|
|
6
3
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
4
|
+
* Provides `Stdio` from `process.argv`, `process.stdin`, `process.stdout`,
|
|
5
|
+
* and `process.stderr`; stdin remains open and stdout/stderr are not ended by
|
|
6
|
+
* default.
|
|
7
|
+
*
|
|
8
|
+
* @category layers
|
|
9
|
+
* @since 4.0.0
|
|
9
10
|
*/
|
|
10
11
|
export declare const layer: Layer.Layer<Stdio.Stdio>;
|
|
11
12
|
//# sourceMappingURL=NodeStdio.d.ts.map
|
package/dist/NodeStdio.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeStdio.d.ts","sourceRoot":"","sources":["../src/NodeStdio.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NodeStdio.d.ts","sourceRoot":"","sources":["../src/NodeStdio.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC;;;;;;;GAOG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAwC1C,CAAA"}
|
package/dist/NodeStdio.js
CHANGED
|
@@ -1,33 +1,72 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Shared Node.js implementation of the Effect `Stdio` service.
|
|
3
|
+
*
|
|
4
|
+
* `NodeStdio` provides {@link Stdio.Stdio} from the current Node process. The
|
|
5
|
+
* exported {@link layer} reads command-line arguments from `process.argv`,
|
|
6
|
+
* consumes input from `process.stdin`, and writes normal and error output to
|
|
7
|
+
* `process.stdout` and `process.stderr`. It is the shared implementation used
|
|
8
|
+
* by Node platform packages for CLIs, scripts, command runners, test harnesses,
|
|
9
|
+
* and other process-oriented programs.
|
|
10
|
+
*
|
|
11
|
+
* **Mental model**
|
|
12
|
+
*
|
|
13
|
+
* Application code should depend on `Stdio`; this module decides that the
|
|
14
|
+
* backing resources are the global Node process handles. The layer does not
|
|
15
|
+
* create new streams and does not claim exclusive ownership of the existing
|
|
16
|
+
* ones.
|
|
17
|
+
*
|
|
18
|
+
* **Common tasks**
|
|
19
|
+
*
|
|
20
|
+
* Use {@link layer} when an Effect program needs process arguments, stdin,
|
|
21
|
+
* stdout, or stderr through the service environment. Pair it with terminal
|
|
22
|
+
* services when the same program also needs line editing, raw key input, or
|
|
23
|
+
* terminal dimensions.
|
|
24
|
+
*
|
|
25
|
+
* **Gotchas**
|
|
26
|
+
*
|
|
27
|
+
* Process stdio streams are shared with the rest of the Node process. This
|
|
28
|
+
* layer leaves stdin open and does not end stdout or stderr by default, avoiding
|
|
29
|
+
* accidental closure of handles that other code may still use. The streams may
|
|
30
|
+
* be pipes, files, or TTYs; terminal-specific behavior such as raw mode, echo,
|
|
31
|
+
* color detection, and cursor movement belongs with terminal APIs.
|
|
32
|
+
*
|
|
33
|
+
* @since 4.0.0
|
|
3
34
|
*/
|
|
35
|
+
import * as Effect from "effect/Effect";
|
|
4
36
|
import * as Layer from "effect/Layer";
|
|
5
37
|
import { systemError } from "effect/PlatformError";
|
|
6
38
|
import * as Stdio from "effect/Stdio";
|
|
7
39
|
import { fromWritable } from "./NodeSink.js";
|
|
8
40
|
import { fromReadable } from "./NodeStream.js";
|
|
9
41
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
42
|
+
* Provides `Stdio` from `process.argv`, `process.stdin`, `process.stdout`,
|
|
43
|
+
* and `process.stderr`; stdin remains open and stdout/stderr are not ended by
|
|
44
|
+
* default.
|
|
45
|
+
*
|
|
46
|
+
* @category layers
|
|
47
|
+
* @since 4.0.0
|
|
12
48
|
*/
|
|
13
49
|
export const layer = /*#__PURE__*/Layer.succeed(Stdio.Stdio, /*#__PURE__*/Stdio.make({
|
|
14
|
-
|
|
50
|
+
args: /*#__PURE__*/Effect.sync(() => process.argv.slice(2)),
|
|
51
|
+
stdout: options => fromWritable({
|
|
15
52
|
evaluate: () => process.stdout,
|
|
16
53
|
onError: cause => systemError({
|
|
17
54
|
module: "Stdio",
|
|
18
55
|
method: "stdout",
|
|
19
56
|
_tag: "Unknown",
|
|
20
57
|
cause
|
|
21
|
-
})
|
|
58
|
+
}),
|
|
59
|
+
endOnDone: options?.endOnDone ?? false
|
|
22
60
|
}),
|
|
23
|
-
stderr:
|
|
61
|
+
stderr: options => fromWritable({
|
|
24
62
|
evaluate: () => process.stderr,
|
|
25
63
|
onError: cause => systemError({
|
|
26
64
|
module: "Stdio",
|
|
27
65
|
method: "stderr",
|
|
28
66
|
_tag: "Unknown",
|
|
29
67
|
cause
|
|
30
|
-
})
|
|
68
|
+
}),
|
|
69
|
+
endOnDone: options?.endOnDone ?? false
|
|
31
70
|
}),
|
|
32
71
|
stdin: /*#__PURE__*/fromReadable({
|
|
33
72
|
evaluate: () => process.stdin,
|