the-moby-effect
Version:
Moby/Docker API client built using effect-ts
55 lines • 1.95 kB
JavaScript
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