UNPKG

the-moby-effect

Version:
55 lines 1.95 kB
import * as Console from "effect/Console"; import * as Data from "effect/Data"; import * as Effect from "effect/Effect"; import * as Sink from "effect/Sink"; import { asMultiplexedChannel, demuxMultiplexedToSeparateSinks, makeMultiplexedChannel } from "./multiplexed.js"; /** * @since 1.0.0 * @category Errors */ export class StdinError extends /*#__PURE__*/Data.TaggedError("StdinError") {} /** * @since 1.0.0 * @category Errors */ export class StdoutError extends /*#__PURE__*/Data.TaggedError("StdoutError") {} /** * @since 1.0.0 * @category Errors */ export class StderrError extends /*#__PURE__*/Data.TaggedError("StderrError") {} /** @internal */ export const demuxFromStdinToStdoutAndStderr = (sockets, options) => Effect.flatMap(Effect.all({ NodeSinkLazy: Effect.promise(() => import("@effect/platform-node/NodeSink")), NodeStreamLazy: Effect.promise(() => import("@effect/platform-node/NodeStream")) }, { concurrency: 2 }), ({ NodeSinkLazy, NodeStreamLazy }) => { const stdin = NodeStreamLazy.fromReadable(() => process.stdin, cause => new StdinError({ cause, message: "stdin is not readable" })); const stdout = NodeSinkLazy.fromWritable(() => process.stdout, cause => new StdoutError({ cause, message: "stdout is not writable" }), { endOnDone: false }); const stderr = NodeSinkLazy.fromWritable(() => process.stderr, cause => new StderrError({ cause, message: "stderr is not writable" }), { endOnDone: false }); const { underlying } = asMultiplexedChannel(sockets); const multiplexedChannel = makeMultiplexedChannel(underlying); return demuxMultiplexedToSeparateSinks(multiplexedChannel, stdin, stdout, stderr, options); }); /** @internal */ export const demuxWithInputToConsole = (sockets, input, options) => demuxMultiplexedToSeparateSinks(sockets, input, Sink.forEach(Console.log), Sink.forEach(Console.error), options); //# sourceMappingURL=stdio.js.map